Skip to content

Instantly share code, notes, and snippets.

@pawjunior
Last active January 23, 2023 08:44
Show Gist options
  • Save pawjunior/7f032611c29d840ecbc595acce93f969 to your computer and use it in GitHub Desktop.
Save pawjunior/7f032611c29d840ecbc595acce93f969 to your computer and use it in GitHub Desktop.
Практическая работа № 70. Итоговые задачи по PHP. Строки
//Дана строка. Если она начинается на 'abc', то заменить их на 'www', иначе добавить в конец строки 'zzz'.
<?php
$arr = ['abcasdiuyabc', 'qabcyu'];
foreach($arr as $v){
$reg = '/^(abc)(.*)/';
if(preg_match($reg, $v))
$v = preg_replace($reg, 'www\2', $v);
else
$v .= 'zzz';
echo "<br/>$v";
}
?>
//Пользователь вводит названия городов через пробел. Переставьте названия так, чтобы названия были упорядочены по алфавиту.
<?php
function alphaSortString(string $string){
$output = $string;
$words = explode(' ',$string);
if(count($words)>1){
sort($words,SORT_STRING);
$output = implode(' ',$words);
}
return $output;
}
echo '<pre>'; print_r(alphaSortString('Хабаровск Москва Анадырь Красноярск Сеул Ростов-на-Дону Франкфурт-на-Майне')); echo '</pre>';
?>
//Удалите в строке все буквы 'x', за которыми следует 'abc'.
<?php
$string = 'sdsfsxabcgjjgjgjxaxvjxabffjfjfjfxabc';
$string = str_replace('xabc', 'abc', $string);
echo $string;
?>
//Найдите количество вхождения 'aba' в строку.
<?php
$str = 'afdsdghabakjgrsafdabaetugheabay';
for ($i=0; $i<strlen($str)-3; $i++)
if (substr($str,$i,3)=='aba')
$n++;
echo "Количество вхождений aba: $n";
?>
//Дан текст. Заменить все email в этом тексте на '[email]'. Например, 'пишите мне на itmathrepetitor@gmail.ru по любому вопросу' преобразуется в 'пишите мне на [email] по любому вопросу'.
<?php
$str = 'пишите мне на itmathrepetitor@gmail.ru по любому вопросу';
echo preg_replace('~[^\s@]+@[^\s]+~', '[email]', $str);
?>
//Дана строка, состоящая из слов, разделенных символами, которые перечислены во второй строке. Показать все слова.
<?php
$str = "random_string_with_divider";
$r = "_";
$mas = explode($r, $str);
foreach ($mas as $m)
echo "$m<br>";
?>
//Написать конвертер строки. Возможности: перевод всех символов в верхний регистр, перевод всех символов в нижний регистр, перевод всех символов в нижний регистр и первых символов слов в верхний регистр, инвертирование регистра, случайный регистр для каждого символа.
<?php
class DataStore
{
public $result;
public function __construct(string $string)
{
$this->result = $string;
}
public function uppercaseAllCharacters()
{
$this->result = strtoupper($this->result);
print $this->result . '<br>';
return $this;
}
public function lowercaseAllCharacters()
{
$this->result = strtolower($this->result);
print $this->result . '<br>';
return $this;
}
public function allCharLowerAndFirstCharUpper()
{
$this->result = ucwords($this->result);
print $this->result . '<br>';
return $this;
}
public function registerInversion()
{
$chars = array_map(
function($char){
return $char === strtolower($char) ? strtoupper($char) : strtolower($char);
},
preg_split('~~u', $this->result, -1, PREG_SPLIT_NO_EMPTY)
);
$this->result = join($chars);
print $this->result . '<br>';
return $this;
}
public function randomCase()
{
$chars = array_map(
function($char){
return mt_rand(0, 1) ? strtoupper($char) : strtolower($char);
},
preg_split('~~u', $this->result, -1, PREG_SPLIT_NO_EMPTY)
);
$this->result = join($chars);
print $this->result . '<br>';
return $this;
}
}
(new DataStore('test String'))
->uppercaseAllCharacters() // перевод всех символов в верхний регистр
->lowercaseAllCharacters() // перевод всех символов в нижний регистр
->allCharLowerAndFirstCharUpper() // перевод всех символов в нижний регистр и первых символов слов в верхний регистр
->registerInversion() // инвертирование регистра
->randomCase(); // случайный регистр для каждого символа
?>
//Удалить в строке все «лишние» пробелы, то есть из нескольких подряд идущих пробелов оставить только один.
<?php
$str = "«Купив телефон сегодня вы получите самый лучший подарок»";
echo $str = preg_replace('/\s+/', ' ', $str);
?>
//Дан текст. Разбить его на строки (длина строк дана) так, чтобы разделение строк произошло на пробельном символе (если это невозможно, показать сообщение об ошибке) и строка равномерное дополнилась пробелами до необходимой длины.
//Код не очень рабочий, нужна помощь в доработке
<?php
$text = "Дан текст. Разбить его на строки (длина строк дана) так, чтобы разделение строк произошло на пробельном символе (если это невозможно, показать сообщение об ошибке) и строка равномерно дополнилась пробелами до необходимой длины"; // текст
$line_count = 75; // Количество символов в строке
$line_num = 0;
for ($i=0; $i < strlen($text); $i++) {
$buf[$line_num] .= $text[$i];
if (strlen($buf[$line_num]) >= $line_count ){
if ($text[$i] == " "){
$line_num++;
}else{
//echo "Error line {$line_num}";
$text[$i] = $text[$i]." " ;
}
}
}
foreach ($buf as $ln => $str) {
if(strlen($str) < $line_count){
$str .= str_repeat(" ", abs(strlen($str) - $line_count));
}
echo $str."<br>";
}
?>
//В строке хранится дата и время в формате Дата-Месяц-Год Час:Мин:Сек (например, 12-02-2015 22:37:01). Определите содержит ли строка данные в необходимом формате и корректны ли данные.
<?php
$yourDateTimeString = '01-12-2022 15:39:00';
$format = 'd-m-Y H:i:s';
function validateDate($date, $format = 'Y-m-d H:i:s')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
var_dump(validateDate($yourDateTimeString, $format));
?>
//Дан текст css-файла. Предоставить пользователю список всех цветов из этого файла. Далее пользователь указывает какой цвет заменить на новый.
<?php
$file = file("style.css");
$color = array();
foreach($file as $v){
if(preg_match("~#[a-f0-9]+|(?<=rgba)\(([\d],){3}[\d]+(\.\d+)?\)~iu",$v,$m)){
$color[] = $m[0];
}
}
print_r($color);
?>
//Пользователь вводит email. Осуществить проверку на корректность (длина больше восьми, присутствует символ @, после которого присутствует символ '.', между этими двумя символами есть хотя бы две буквы, оканчивается на 'ru', 'com', 'net' или 'by', символ '_' может встречаться только один раз, до символа @ могут быть только цифры, буквы и символ '_').
<?php
const LENGTH = 8; // Длина E-mail
const PCRE = '~^[\pL\d]+_?[\pL\d]*@\pL{2,}[\pL\d]*\.(?:ru|com|net|by)$~';
$msg = $class = $email = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (! empty($_POST['email'])) {
$email = htmlspecialchars(trim($_POST['email']));
if (mb_strlen($email) > LENGTH) {
if (preg_match(PCRE, $email)) {
$class = 'ok';
$msg = 'E-mail введён корректно';
} else {
$class = 'error';
$msg = "Не корректный E-mail";
}
} else {
$class = 'error';
$msg = 'Длина E-mail должна быть больше ' . LENGTH . ' символов';
}
} else {
$msg = 'Заполните поле';
}
}
?>
<?= $msg ?>
<form method="post">
Введите email: <input type="text" name="email" value="<?= $email ?>" placeholder="E-mail" class="<?= $class ?>"><br>
<input type="submit" value="Отправить">
</form>
<style>
.error { color: red; }
.ok { color: blue; }
</style>
//В данной строке найти количество цифр.
<form method="POST">Введите строку<br>
<input name="t1"><br>
<input type="submit" name="but"><br>
</form>
<?php
if(isset($_POST['but'])) {
$str=$_POST['t1'];
$n=0;
for ($i=0;$i<strlen($str);$i++)
if (is_numeric($str[$i])) $n++;
echo "Количество цифр: ".$n; }
?>
//Пользователь вводит пароль. Определите уровень сложности пароля (разработать алгоритм определения сложности по 10 балльной шкале).
<?php
class CheckPasswordComplexity
{
function checkPassword($password)
{
$strength = ['10', '7', '4', '1'];
if ($this->isEnoughLength($password, 12) && $this->containsMixedCase($password) && $this->containsDigits($password) && $this->containsSpecialChars($password)) {
return $strength[0];
} elseif ($this->isEnoughLength($password, 10) && $this->containsMixedCase($password) && $this->containsDigits($password)) {
return $strength[1];
} elseif ($this->isEnoughLength($password, 8) && $this->containsMixedCase($password)) {
return $strength[2];
} elseif ($this->isEnoughLength($password, 8) && $this->containsDigits($password)) {
return $strength[2];
} elseif ($this->isEnoughLength($password, 8) && $this->containsSpecialChars($password)) {
return $strength[2];
} else {
return $strength[3];
}
}
private function isEnoughLength($password, $length)
{
if (empty($password)) {
return false;
} elseif (strlen($password) < $length) {
return false;
} else {
return true;
}
}
private function containsMixedCase($password)
{
if (preg_match('/[a-z]+/', $password) && preg_match('/[A-Z]+/', $password)) {
return true;
} else {
return false;
}
}
private function containsDigits($password)
{
if (preg_match("/\d/", $password)) {
return true;
} else {
return false;
}
}
private function containsSpecialChars($password)
{
if (preg_match("/[^\da-z]/", $password)) {
return true;
} else {
return false;
}
}
}
//Дана строка. Если ее длина больше 10, то оставить в строке только первые 6 символов, иначе дополнить строку символами 'o' до длины 12.
<?php
$str = "asdfghg";
if(strlen($str)<10) {
echo substr($str, 0, 6);
}
else echo str_pad($str, 12, "o");
?>
//Определить является ли введенный текст записью целого числа, записью вещественного числа.
<?php
$a = 32;
if (is_int($a) === true) {
echo "$a – целое число";
}
elseif (is_float($a) === true) {
echo "$a – вещественное число";
}
else echo "Это не пойми что";
?>
//Исключить из строки группы символов, расположенные между символами «/*», «*/» включая границы . Предполагается, что нет вложенных скобок.
<?php
$string = 'Сергей/* Андрей*/ Владимир Андрей /* Сергей */ Андрей';
while (($l=strpos($string,'/*'))!==false && ($r=strpos($string,'*/',$l))!==false)
$string=substr($string,0,$l).substr($string,$r+2);
echo $string;
//Дан список слов. Заменить в заданной строке все слова из списка на серию из '*'.
<?php
$text = "Маша ест жёлтый апельсин, играет с розовой куклой";
$change = array(
"Маша" => "*",
"ест" => "*",
"жёлтый" => "*",
"апельсин" => "*",
"," => "*",
"играет" => "*",
"с" => "*",
"розовой" => "*",
"куклой" => "*");
$changetext = str_replace(array_keys($change), array_values($change), $text);
echo $changetext;
?>
//Создать функцию по преобразованию нотаций: строка вида 'this_is_string' преобразуется в 'thisIsString' (так называемая CamelCase-нотация)
<?php
function camelCaseConverter(string $str){
$words = explode('_',$str);
if(count($words) > 1){
$output = '';
foreach($words as $word){
$tmp = strtolower($word);
$output .= ucfirst($tmp);
}
return $output;
}else{
return $str;
}
}
var_dump(camelCaseConverter('THIS_STOF'));
?>
//Дано два текста. Определите степень совпадения текстов (разработать алгоритм определения соответствия по 5 балльной шкале).
<?php
$sim = similar_text('ttttt', 'ttttt', $perc);
echo "Сходство: $sim ($perc %)\n";
echo "<br>";
$sim = similar_text('ttttt', 'ttttu', $perc);
echo "Сходство: $sim ($perc %)\n";
echo "<br>";
$sim = similar_text('ttttt', 'tttuu', $perc);
echo "Сходство: $sim ($perc %)\n";
echo "<br>";
$sim = similar_text('ttttt', 'ttuuu', $perc);
echo "Сходство: $sim ($perc %)\n";
echo "<br>";
$sim = similar_text('ttttt', 'tuuuu', $perc);
echo "Сходство: $sim ($perc %)\n";
echo "<br>";
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment