Обрабатываем строки. Часть 2.
На днях писал пост на тему обработки строк. Вот решил добить эту тему…
Оставшиеся функции для обработки строк я объединил в два класса – функции для выделения подстрок и функции для поиска и замены в строках.
Выделение подстрок
Начнем с одной полезной функции - substr (string, start[, length]). Она выделяет часть строки string длиной length, которая начинается со start-ого символа.
Если задать положительное число в параметре start, то возвращаемая строка будет начинаться с start-ого символа строки string:
$str = substr("abcdef", 1); // вернет "bcdef"
$str = substr("abcdef", 1, 3); // вернет "bcd"
?>
Если параметр start отрицательный, то возвращаемая строка будет начинаться c start-ого символа от конца строки string:
$str = substr("abcdef ", -1); // вернет "f"
$str = substr("abcdef ", -2); // вернет "ef"
$str = substr("abcdef ", -3, 1); // вернет "d"
?>
Если параметр length указан и он положительный, то возвращаемая строка закончится за length символов от начала start. Получится строка с отрицательной длиной (потому что начало будет за концом строки), поэтому возвращаемая строка будет содержать один символ от начала строки string. Если length указан и он отрицательный, то возвращаемая строка закончится за length от конца строки string. Это опять приведет к строке с отрицательной длиной, поэтому возвращаемая строка будет содержать один символ от начала строки start.
Я никого не запутал? ) Потому что сразу сам не понял всего этого, но функция, судя по всему, очень гибкая в настройке.
Пример:
$str = substr("abcdef", -1, -1); // вернет "bcde"
?>
Чтобы лучше понять, как работает эта функция, советую поэкспериментировать самим с ней.
Поиск и замена
Наверно все знают знаменитую комбинацию клавиш CTRL+H в текстовых процессорах типа Microsoft Word. Она позволяет осуществлять поиск и замену одного текстового фрагмента на другой. PHP также имеет функции для осуществления такой замены.
$str = ‘This is a white rose’;
$str = str_replace(‘white’, ‘red’, $str); // Результат: This is a red rose
?>
Конечно, мы можем использовать эту функцию и для удаления слов из строки. Достаточно во втором аргументе указать пустую строку:
$str = ‘This is a white rose’;
$str = str_replace(‘white’, ‘’, $str); // Результат: This is a rose
?>
Еще есть аналог этой функции - str_ireplace для регистронезависимого поиска и замены строк, но он работает только в новых версиях php.
Также у функции str_replace есть аналоги для работы с регулярными выражениями ereg_replace и preg_replace, но регулярные выражения - это тема огромная и я рассмотрю ее в отдельной статье.
А если мы хотим выделить подстроку и заменить ее на другую строку, то можно использовать функцию substr_replace.
Ну а что касается поиска строки без замены, то тут к нам на помощь приходит функция strpos, предназначенная для поиска позиции первого вхождения заданной строки в другую строку:
$pos = strpos(‘hello world’, ‘world’);
echo $pos; // выведет: 6
?>
А если строка world не найдена? В этом случае функция вернет false, но возвращаемое значение нужно сравнивать оператором = = =, а не = =, поскольку первый учитывает тип операнда:
$pos = strpos(‘hello world’, ‘string’);
if (false === $pos) {
echo ‘Строка не найдена’;
} else {
echo ‘Строка найдена на позиции ’.$pos;
}
?>
Для подсчета количества вхождений подстроки в заданную строку, тоже есть функция - substr_count:
echo substr_count("вход и выход", "ход"); // 2
?>
Теперь и строки не страшны. Ведь в php с ними можно сделать что угодно, особо не заморачивась.
P.S.: Все функции из этой и предыдущей статьи про строки я бы не советовал заучивать), т.к. и сам вряд ли все запомнил. Решил для себя использовать эти статьи как небольшое справочное руководство по строкам.
скрипти полезние… А вот защита строк ввода то спец символов ( / $ ) нету… :_(
Хм, хорошое замечание ) Скоро специально напишу статью про защиту строк от ввода спец-символов.
Кстати… А можете розказать подробно о BBcode.
Например как создать форму для вводу даних с возможностю вставки BBcode, ето очень часто используют на форумах для защити даних от спец символов…
Хотела б услишать ваше мнение….
Да, я обязательно рассмотрю это в ближайших статьях
У меня вопрос! как запрограмировать кнопку, чтоб при клике появлялось значение в поле ввода текста…
например (вставка смайликов)… Нужно очень!
Если можно, то навидите пример…
Ну вообще-то это к теме не относится, но могу предположить, что будет примерно так:
<a href="javascript:void(0);" onClick="document.getElementById('test_id').innerHTML += 'два'; return false;" rel="nofollow">Вставка</a>
Очень благадарна за скрипт, только проблема! В Оперене не роботает…
(Все планиги и скрипти включини), почему не ротает… Незнаю…
Видимо в опере нельзя изменять свойство элемента innerHTML. Советую копать в эту сторону
увы не все в жизни бывает так как нам хочеться…
Всё в опере работает и в других браузерах, только не так. Вместо innerHTML нужно использовать value, если память не изменяет…
В этом случае функция вернет false, но возвращаемое значение нужно сравнивать оператором = = =, а не = =, поскольку первый учитывает тип операнда:
$pos = strpos(‘hello world’, ‘h’);
if (false === $pos)
Тут возможно для новичков не совсем ясно про тип операнда. Дело в том, что нумерация в строках начинается с нуля (как в массивах) и в данном случае $pos = 0.
Потом если мы сравним вот так if (false == $pos), то условие сработает! Потому что $pos = 0 преобразуется в $pos = false при сравнении не учитывающм тип переменной (==)
А при (===) тип переменной учитывается и false уже никак не будет равно 0
для лены… попробуйте скачать и подключить библиотеку jQuery с jquery.com, обычно с ней нет проблем при работе с иннерами и валу.. в опере и ие.
раз
Вставка
нда надо было на дату посмотреть… ((