Проверить наличие подстроки в строке php. PHP: работа со строками. Строковые функции PHP. Как изменить регистр строки в PHP: примеры

Проверить наличие подстроки в строке php. PHP: работа со строками. Строковые функции PHP. Как изменить регистр строки в PHP: примеры

Функция strpos() в PHP - одна из самых используемых при обработке данных строкового типа. Она позволяет определить позицию, начиная с которой в исходную строку входит искомая подстрока. При этом для получения адекватного результата следует учитывать ряд тонкостей.

Входные и выходные параметры

В общем виде синтаксис функции PHP strpos() выглядит следующим образом:

Mixed strpos (string $string , mixed $substring[, int $offset = 0 ])

На вход принимаются два обязательных аргумента и один необязательный:

  • Исходная строка - $string, в которой и будет произведен поиск.
  • Искомая подстрока - $substring. Данный параметр имеет тип mixed. Это означает, что кроме строкового типа данных, функция может принять любой другой. В этом случае аргумент будет преобразован в целое число и обработан, как символьный код.
  • Необязательный параметр, определяющий смещение - $offset. По умолчанию поиск производится с самого начала строки $string, а смещение равно 0. Если определить отрицательное смещение, оно будет отсчитываться с конца строки.

Функция PHP strpos() возвращает позицию, начиная с которой $substring входит в $string. Если таких вхождений несколько, будет возвращена только позиция первого из них.

Если совпадений нет, на выходе будет булево значение false.

Особенности работы

При поиске позиции подстроки важно учитывать, что нумерация символов начинается с нуля. Следовательно, 0 - одно из корректных возвращаемых значений.

При нестрогом сравнении 0 приводится к логическому типу, превращается в false и может быть воспринят как отсутствие вхождений. Поэтому очень важно использовать строгое равенство (===), учитывающее тип сравниваемых величин.

Кроме того, strpos() - пример PHP-функции, зависимой от регистра символов.

Примеры использования

Пример 1. Простое вхождение. Требуется найти позицию, на которой подстрока key входит в строку monkeys.

Пример 2. Отсутствие вхождений. Если изменить искомую строку на KEY, функция PHP strpos() не обнаружит совпадений, так как является регистрозависимой. Результатом будет булево значение false.

Пример 3. Вхождение на нулевой позиции. Важно использовать строгое равенство, проверяя результат работы функции, иначе можно получить некорректный результат.

Первые две проверки определят отсутствие вхождений, несмотря на то, что подстрока life входит в исходную строку lifehack.

Пример 4. Смещение начальной позиции с помощью параметра $offset.

После установки смещения, равного 3, поиск начинается с символа "e".

strripos — Find the position of the last occurrence of a case-insensitive substring in a string

Description

Find the numeric position of the last occurrence of needle in the haystack string.

Unlike the strrpos() , strripos() is case-insensitive.

Parameters

The string to search in.

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call to chr() should be performed.

If zero or positive, the search is performed left to right skipping the first offset bytes of the haystack .

If negative, the search is performed right to left skipping the last offset bytes of the haystack and searching for the first occurrence of needle .

This is effectively looking for the last occurrence of needle before the last offset bytes.

Return Values

Returns the position where the needle exists relative to the beginnning of the haystack string (independent of search direction or offset).

Note : String positions start at 0, and not 1.

Returns FALSE if the needle was not found.

Warning

This function may return Boolean FALSE , but may also return a non-Boolean value which evaluates to FALSE . Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Examples

Example #1 A simple strripos() example

$haystack = "ababcd" ;
$needle = "aB" ;

$pos = strripos ($haystack , $needle );

if ($pos === false ) {
echo "Sorry, we did not find ($needle ) in ($haystack )" ;
} else {
echo "Congratulations!\n" ;
echo "We found the last ($needle ) in ($haystack ) at position ($pos )" ;
}
?>

Сайты можно разделить на статические и динамические. После освоения HTML и CSS, которые позволяют сделать красивую визитку в интернете, многие задумываются, как создать динамический сайт на PHP. При этом верстальщик должен учитывать, что теперь он начинает изучать веб-программирование: принципы работы с сайтом будут отличаться. Одна из первых проблем, с которой сталкивается начинающий в PHP — работа со строками, их чтение и обработка.

Стоит отметить, что в PHP подразумевают большое количество методов, поэтому начинать их изучение стоит с самых простых манипуляций, таких как вывод строки, поиск, получение или замена подстроки, изменение регистра и возвращение длины строки. Многие функции плохо работают с кириллическими символами. Поэтому все примеры написаны на английском для наглядности. Для кириллических строк используются те же функции, но с префиксом mb_ (например, mb_strpos()). Прежде чем использовать аналоги, в php.ini необходимо раскомментировать строку;extension=php_mbstring.dll, просто убрав точку с запятой.

Создание и вывод строки

Мы разберем вывод строки на экран с помощью известной всем языковой конструкции echo. Программист может вывести строку сразу:

echo "Это Новая Строка"

или сначала создать переменную, а затем вывести ее на экран:

$str = "Это Новая Строка";

Если нужно вывести несколько строк в одной, то прибегают к их конкатенации:

echo "Это" . " Новая" . " Строка";

$str1 = "Это";

$str2 = "Новая";

$str3 = "Строка";

echo $str1 . $str2 . $str3;

В последнем случае на экран будет выведено ЭтоНоваяСтрока . Пробел можно добавить сразу при вызове echo:

echo $str1 . " " . $str2 . " " . $str3;

В этом случае на экран выведется: "Это Новая Строка". Конкатенация возможна не только при выводе, но и при создании строки:

$str1 = "Это";

$str2 = "Новая";

$str3 = "Строка";

$string = $str1 . " " . $str2 . " " . $str3;

echo $string;

Echo выводит как так и кириллические. Если одна из переменных содержала число, то при конкатенации это число будет преобразовано в соответствующую строку:

$sum = $i + $i; //теперь $sum содержит число 4

echo $i . " + " . $i . " = " . $sum;

На экран будет выведено: "2 + 2 = 4".

Служебные символы

Допустим, строка определена с помощью ($string = "Вот так"). Тогда можно совершенно спокойно использовать управляющие последовательности:

  • \n совершает перевод строки;
  • \r возвращает каретку;
  • \" экранирует двойные кавычки:
    • echo "Строка с \"двойными\" кавычками"; //Строка с "двойными" кавычками
  • \$ экранирует доллар;
  • \\ экранирует обратную косую черту.

Последовательностей гораздо больше, все их найти можно в официальной документации PHP.

Как найти позицию первого вхождения подстроки

Допустим, у нас есть простая строка:

Также у нас есть две строки с именами:

$name = "Yemelyan";

$anotherName = "Katherin";

Нам необходимо узнать, содержит ли первая строка эти два имени. Для этого используется функция strpos($str, $search). Она возвращает позицию искомой подстроки $search, если эта строка содержится в исходной, $str. В противном случае функция возвращает булево значение false. Например, strpos($string, $anotherName) вернет false, а strpos($string, $name) — целое число. Код будет таким (напишем вариант, когда позиция выводится на экран):

$string = "My name is Yemelyan and I am 27 year old";

$name = "Yemelyan";

$anotherName = "Katherin";

echo strpos($string, $anotherName); //выведет false

echo strpos($string, $name); //выведет позицию первого вхождения подстроки

Учтите, что нумерация строки начинается с нуля, то есть в нашем случае последняя строка выведет число 11 (пробелы также считаются).

Поиск позиции последнего вхождения подстроки и подводные камни

Если функция strpos() возвращает позицию первого вхождения, то обратная ей функция strrpos() ищет последнее вхождение подстроки.

Здесь есть некоторые подводные камни, связанные с началом нумерации. Это стоит учитывать: в PHP работа со строками может быть осложнена ограничениями в сравнениях. Так, лучше не использовать операцию сравнения с отрицанием: strpos($str, $search)!=false. В любой версии PHP примеры с подобной эквиваленцией могут работать неправильно, ведь нумерация строк начинается с нуля, а в логической интерпретации 0 и есть false. Это распространяется и на функцию strrpos().

Как найти число вхождений подстроки

Часто нужно найти не позицию первого или последнего вхождения подстроки в строку, а общее их число. Для этого используется функция substr_count(), которая обрабатывает по меньшей мере две переменные: substr_count($str, $search). Возвращает целое число. Если необходимо уменьшить область поиска по строке, то в функцию передаются еще две переменные: начало и конец строки соответственно. То есть функция в этом случае вызывается так: substr_count($str, $search, $start, $end). Функция будет искать подстроку $search на промежутке от $start до $end исходной строки $str. Если строка не будет найдена, то функция вернет ноль.

Как изменить регистр строки в PHP: примеры

Изменение регистра часто используется для сравнения строк и Допустим, пользователь должен ввести имя верховного бога в В программе есть вариант "Один", с которым и будет сравниваться ответ пользователя. Если введенный текст не будет совпадать с имеющимся (например, пользователь напишет "один" или "ОДИН"), то программа вернет значение false вместо true. Чтобы этого избежать, применяется функция изменения регистра. Это часто используется, если сайт на PHP имеет теги: вместо сотни вариантов слова "личное" ("Личное", "личное", "ЛИЧНОЕ" и т. п.) есть только один тег в нижнем регистре.

Функция strtolower() изменяет регистр на нижний. Допустим, есть строка $catName = "Fluffy". Функция strtolower($catName) вернет строку "fluffy". Изменить регистр на верхний можно с помощью функции strtoupper().

Как найти длину строки в PHP: работа с функциями

Часто требуется найти длину строки. Например, в PHP работа со строками такого рода может понадобиться в создании цикла. Для поиска строки используется функция strlen(), которая возвращает число — количество символов. Нельзя забывать, что последний символ будет иметь номер strlen($str)-1, так как нумерация начинается с нуля.

Получение и замена подстроки в PHP: работа со строками

Получение подстроки осуществляется функцией substr(), которая может принимать два или три аргумента: substr($str, $start, $end). Допустим, у нас есть строка $string = "Fluffy cat", и мы хотим получить подстроку со второго по четвертый символ. Так как нумерация начинается с нуля, то переменная с этой подстрокой будет выглядеть так: $newString = substr($string, 1, 4). Если же мы введем $newString = substr($string, 1), то получим подстроку со второго символа по последний (то есть "luffy"). Этот код идентичен полному коду строки с использованием strlen(): substr($string, 1, strlen($string)).

Для замены подстроки используется функция str_replace(), которая принимает три переменные: str_replace($subStr, $newSub, $str). В отличие от многих функций, str_replace() корректно работает с кириллическими символами и не имеет аналога с префиксом. Пример:

$str = "Сегодня ужасная погода!";

$newStr = str_replace("ужасная", "чудесная", $str); //Сегодня чудесная погода!

Перевод строки в число

Каждому, кто изучает веб-программирование, рано или поздно приходится переводить строку в число. Для этого используются две похожие функции: intval() и floatval(), каждая из которых принимает одну переменную $string. Друг от друга они отличаются только типом возвращаемых данных: intval() возвращает целое число, а floatval() - число с плавающей точкой.

Для использования как intval(), так и floatval() необходимо, чтобы строка начиналась с цифр, они и будут преобразованы в число. Если после цифр будет идти любой набор букв, они просто проигнорируются. В том случае, если строка начинается с букв, использование функции вернет ноль. В идеале же строка должна содержать в себе исключительно цифры.

Перевод числа в строку

Часто требуется перевести числа в строку. Скажем, если необходимо взять половинку числа и возвести ее в квадрат (например, проверить, выполняется ли равенство: 88 х 88 + 33 х 33 = 8833). В этом случае используется функция strval(), которая возвращает строку с числом. После этого с новой строкой можно совершать все прочие действия: изменять, искать вхождение подстроки и другие функции. При необходимости строку можно вновь перевести в число уже описанным выше способом.

В статье была рассмотрена лишь малая часть всех функций, связанных со строками. Часть неописанных функций работает с символами, но большая не была включена в материал из-за специфичности. Для ознакомления с этими функциями необходимо перейти к чтению официальной документации по PHP, которая отображает актуальную информацию.

Строки — очень важный тип данных, с которым приходится постоянно работать при решении задач веб разработки. В данной статье описаны 10 очень полезных приемов, которые сделают жизнь PHP разработчика легче.

Автоматическое удаление html тегов из строки

При использовании форм, заполняемых пользователем, иногда нужно удалить все лишние теги. Данная задача легко решается с помощью функции strip_tags():

$text = strip_tags($input, "");

Получаем текст между $start и $end

Такая функция должна быть в арсенале разработчика: она получает оригинальную строку, начало и конец, а возвращает текст, который содержится между $start и $end.

Function GetBetween($content,$start,$end){ $r = explode($start, $content); if (isset($r)){ $r = explode($end, $r); return $r; } return ""; }

Трансформация URL в гиперссылку

Если вы поместите URL в форме комментария в блоге WordPress, она автоматически трансформируется в гиперссылку. Если вы хотите реализовать такую же функциональность на своем сайте или в веб приложении, то можно использовать следующий код:

$url = "Jean-Baptiste Jung (http://www.webdevcat.com)"; $url = preg_replace("#http://(+)#", " ", $url);

Разделяем текст в 140 символный массив для Twitter

Может быть вы знаете, что Twitter принимает сообщения длиной не более 140 символов. Если у вас есть планы организовать взаимодействие своего приложения с популярным социальным сайтом сообщений, то функция, которая обрезает сообщения до 140 символов, наверняка придётся вам ко двору.

Function split_to_chunks($to,$text){ $total_length = (140 - strlen($to)); $text_arr = explode(" ",$text); $i=0; $message=""; foreach ($text_arr as $word){ if (strlen($message[$i] . $word . " ") <= $total_length){ if ($text_arr == $word){ $message[$i] .= $word; } else { $message[$i] .= $word . " "; } } else { $i++; if ($text_arr == $word){ $message[$i] = $word; } else { $message[$i] = $word . " "; } } } return $message; }

Удаляем URL из строки

Многие люди оставляют в комментариях блога URL, чтобы получить трафик или организовать обратную связь. Такие ссылки загрязняют блог и могут стать причиной расстройств владельца в случае их большого количества. Так что следующая функция будет очень полезна!

$string = preg_replace("/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*/i", "", $string);

Конвертируем строку в слаг

Нужно генерировать слаг (для постоянной ссылки), который будет совместим с задачами SEO? Следующая функция принимает строку в качестве параметра и возвращает совместимый с задачами SEO слаг. Просто и эффективно!

Function slug($str){ $str = strtolower(trim($str)); $str = preg_replace("/[^a-z0-9-]/", "-", $str); $str = preg_replace("/-+/", "-", $str); return $str; }

Парсинг файла CSV

CSV (Coma separated values — значения, разделённые запятой) файлы — простой способ для хранения и передачи данных, а парсинг таких файлов в PHP выполняется чрезвычайно просто. Не верите? Следующий код демонстрирует обработку CSV файла:

$fh = fopen("contacts.csv", "r"); while($line = fgetcsv($fh, 1000, ",")) { echo "Contact: {$line}"; }

Поиск строки в другой строке

Если строка содержится в другой строке и вам нужно найти ее, то задача решается просто:

Function contains($str, $content, $ignorecase=true){ if ($ignorecase){ $str = strtolower($str); $content = strtolower($content); } return strpos($content,$str) ? true: false; }

Проверяем, что строка начинается с определённого шаблона

Некоторые языки программирования, например, Java, имеют метод/функцию startWith, которая позволяет проверять, начинается ли строка с определённого шаблона. К сожалению, PHP не имеет такой простой встроенной функции.
Тем не менее, мы можем сделать её для себя, причём, очень просто::

Function String_Begins_With($needle, $haystack) { return (substr($haystack, 0, strlen($needle))==$needle); }

Выделяем email из строки

Когда-нибудь удивлялись, как спамеры получают ваши email адреса? Все просто. Они берут веб страницу (например, с форума) и проводят парсинг html кода для выделения emails адресов. Ниже приведённый код получает строку в качестве параметра и печатает все email, которые содержатся в ней. Пожалуйста, не используйте данный код для спама!

Function extract_emails($str){ // Регулярное выражение, которое извлекает все email из строки: $regexp = "/()+\@(()+\.)+({2,4})+/i"; preg_match_all($regexp, $str, $m); return isset($m) ? $m : array(); } $test_string = "Тестовая строка... test1@example.org Проверяем другие форматы: test2@example.org; foobar Ещё проверка: test5@example.org test6example.org test7@example.net.org.com test8@ example.org test9@!foo!.org foobar "; print_r(extract_emails($test_string));

Предположим, что нам нужно найти подстроку в строке при помощи php.

Для решения этой задачи подходят разные инструменты.

Поиск подстроки с использованием функции strpos

Функция strpos возвращает позицию первого вхождения подстроки.

$mystring = "abc"; $findme = "a"; $pos = strpos($mystring, $findme); // Заметьте, что используется ===. Использование == не даст верного // результата, так как "a" находится в нулевой позиции. if ($pos === false) { echo "Строка "$findme" не найдена в строке "$mystring""; } else { echo "Строка "$findme" найдена в строке "$mystring""; echo " в позиции $pos"; }

Функция возвращает либо порядковый номер первого символа подстроки в исходной строке, либо false, в случае если ничего не найдено.

Для этой функции существует регистронезависимый аналог: stripos

Еще одна функция для этой задачи: strrpos . Она находит последнее вхождение подстроки.
У нее, разумеется, тоже имеется регистронезависимый вариант: strripos

Если функция strpos не подходит для вашей цели, то найдите другой инструмент.
Для работы со строками существует также масса функций, о существовании которых необходимо знать: функции для работы со строками.

Поиск подстроки при помощи функции preg_match

Эта функция производит поиск подстроки при помощи регулярного выражения.

Регулярное выражение — это шаблон, который сравнивается со строкой. Под один шаблон может подходить сразу множество разных строк.

Они пригодятся если вам нужно производить поиск не по конкретной подстроке, а найти все строки, обладающие свойствами, описанными при помощи регулярного выражения. Знание этой темы сильно расширяет ваши возможности в работе со строками.

просмотров