Last active
January 23, 2023 08:44
-
-
Save pawjunior/7f032611c29d840ecbc595acce93f969 to your computer and use it in GitHub Desktop.
Практическая работа № 70. Итоговые задачи по PHP. Строки
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Дана строка. Если она начинается на '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