|
|
|
| С помощью вот этого выражения
$text = preg_replace('#((.)\2{2,1000})#', ' ', $text);
|
удаляются четыре и более идущих подряд одинаковых знаков.
Как на основе его (или без него) установить переменную $error = 'yes", если выполняется хотя бы одно из условий:
1. в переменной $text имеются четыре и более одинаковых знака, идущие подряд, и эти знаки не являются цифрами;
2. в переменной $text имеется целое число, содержащее более более 12 цифр;
3. в переменной $text имеется слово, длиннее 20 знаков. | |
|
|
|
|
|
|
|
для: Владимир55
(03.07.2011 в 21:14)
| | А можно увидеть содержимое переменной $text или её фрагмента (с участком, о котором идет речь)? | |
|
|
|
|
|
|
|
для: cheops
(03.07.2011 в 21:16)
| | Иногда люди забивают форму всякой дрянью. Например:
==========ВВВВВВВВВВВБольшая Советская Энциклопедия (БСЭ) содержит огромное количество информации по всем областям человеческих знаний.
5555555555555555555555555555555 От-искусства-и-культуры_до_науки_и_техники.
Огромноеколичествостатейпосвященобио графиямвидныхсоветскихииностранныхд еятелей
|
Если такая информация имеется в переменной $text , то ее надо идентифицировать как ошибочную. Тут есть и лишенные смысла выражения, и забивание поля одинаковыми цифрами, и слова без пробелов.
А вот если введен текст типа:
то здесь одинаковые цифры не являются ошибкой. | |
|
|
|
|
|
|
|
для: Владимир55
(03.07.2011 в 21:14)
| | Выражение должно быть одно или под разные задачи можно использовать разные выражения? | |
|
|
|
|
|
|
|
для: cheops
(03.07.2011 в 21:47)
| | Можно три и даже больше выражений, чтобы использовать для каждого условие вида
if (Выражение 1) $error = "yes";
if (Выражение 2) $error = "yes";
if (Выражение 3) $error = "yes";
|
| |
|
|
|
|
|
|
|
для: Владимир55
(03.07.2011 в 21:50)
| | Можно поступить следующим образом
<?php
$text = "==========ВВВВВВВВВВВБольшая Советская Энциклопедия (БСЭ) содержит
огромное количество информации по всем областям человеческих знаний.
5555555555555555555555555555555 От-искусства-и-культуры_до_науки_и_техники.
Огромноеколичествостатейпосвященобио графиямвидныхсоветскихииностранныхд еятелей ";
$error = "no";
// 1. в переменной $text имеются четыре и более одинаковых знака,
// идущие подряд, и эти знаки не являются цифрами;
$pattern = "|([^\s\d])\\1{4,}|";
if(preg_match($pattern, $text)) $error = "yes";
// 2. в переменной $text имеется целое число, содержащее более более 12 цифр;
$pattern = "|\d{12,}|";
if(preg_match($pattern, $text)) $error = "yes";
// 3. в переменной $text имеется слово, длиннее 20 знаков.
$pattern = "|\b[\w]{20,}\b|";
if(preg_match($pattern, $text)) $error = "yes";
echo $error;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.07.2011 в 11:51)
| | Все превосходно, вот только не выполняется третье условие, если слова склены небуквами и нецифрами. Например, так:
$text = "ee-eeeee-eeeee-eeeee-eeee-ee";
|
Или так:
$text = "ee=eeeee=eeeee=eeeee=eeee=ee";
|
Или так:
$text = "ee>eeeee>eeeee>eeeee>eeee>ee";
|
Или так:
$text = "ee:eeeee:eeeee;eeeee.eeee/ee";
|
| |
|
|
|
|
|
|
|
для: Владимир55
(04.07.2011 в 14:16)
| | Тогда замените его следующим регулярным выражением
$pattern = "|\b[\S]{20,}\b|";
|
| |
|
|
|
|
|
|
|
для: cheops
(04.07.2011 в 15:52)
| | Превосходно получилось!
Большое спасибо! | |
|
|
|
|
|
|
|
для: cheops
(04.07.2011 в 15:52)
| | Дорогой гуру! Я теоретически понял регулярку: ([^\s\d])\\1{4,}, но вот проверить ее на практике не удается. Не работает.
Простите, был вынужденный перерыв в их изучении. Буду рад, если объясните "на пальцах".
Спасибо. | |
|
|
|
|
|
|
|
для: Deed
(04.07.2011 в 21:36)
| | А как проверяете работу регулярного выражения, что у вас выводит следующий скрипт?
<?php
$text = "ВВВВВВВВВВВ";
$pattern = "|([^\s\d])\\1{4,}|";
if(preg_match($pattern, $text)) echo "Все-таки работает<br>";
else echo "Нет, у меня не работает<br>";
$text = "ВфВфВфВфВфВфВфВфВфВфВ";
if(preg_match($pattern, $text)) echo "Нет, ничего не работает";
else echo "А вот это уже не срабатывает";
?>
| В некоторых системах регулярное выражение вполне может не работать, так как тут используется "карман", причем не в последующих параметрах функций, а прямо в регулярном выражении, насколько известно, не все библиотеки это поддерживают.
([^\s\d]) - это один символ, отличный от пробела и числа.
\\1 - тот же самый символ, вернее ссылка на первые круглые скобки, вы наверняка много раз встречались с этой последовательностью при замене при помощи preg_replace(), только при замене, мы используем эту последовательность во втором параметре, который подставляется вместо найденной подстроки.
\\1{4,} - четыре или более подряд идущих одних и тех же символов, просто [^\s\d] - выдаст последовательность 4 первых попавшихся символов, а это выражение именно одинаковых. | |
|
|
|
|
|
|
|
для: cheops
(04.07.2011 в 22:22)
| | cheops, можно ли еще составить два условия?
1. На случай, когда идут подряд повторяющиеся слова (хотя бы два соседних слова одинаковы, желательно без учета регистра). Типа
$text = "Ремонт ремонт ремонт ремонт квартир";
|
При этом не забанить правильные выражения, пишушиеся через тире. Типа "далеко-далеко", "быстро-быстро", или с частичным вхождением (Иван Иванович) и т.п.
2. Повторяющиеся пары слов. Типа
$text = "хочу пива хочу пива хочу пива с воблой";
|
| |
|
|
|
|
|
|
|
для: Владимир55
(06.07.2011 в 13:58)
| | Вот с этим уже сложнее, надо подумать... если придумаю(вспомню) решение - отпишусь. | |
|
|
|