[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка введенного текста
noo
В общем, нужно проверять данные из формы на то, чтобы они содержали только буквы, цифры, запятые, точки и пробелы естественно.

Помогите, пожалуйста, регуляркой!






Спустя 6 минут, 13 секунд (7.06.2010 - 21:14) noo написал(а):
ах да, забыл - еще дефисы и тире тоже пропускать надо)

Спустя 10 часов, 39 минут, 8 секунд (8.06.2010 - 07:53) Basili4 написал(а):
http://www.softtime.ru/bookphp/gl7_1.php читай там все написано.

Спустя 3 часа, 4 минуты, 40 секунд (8.06.2010 - 10:58) noo написал(а):
Цитата (Basili4 @ 8.06.2010 - 04:53)
http://www.softtime.ru/bookphp/gl7_1.php читай там все написано.

спасибо, пытаюсь вдуплить, однако появляются непонятки.
Читаю:
Цитата
В регулярном выражении может быть несколько ветвей, которые разделяются символом |, действующим как оператор OR (ИЛИ)

когда ставлю | php мне ругается на мою регуляркку, именно на этот | как непонятный символ.

Типа того должно быть?
[а-Я|a-Z|0-9|,|.|-] - если честно, то я таких регулярок в жизни не видел smile.gif и естественно не работает. Кто объяснит?

Спустя 4 часа, 31 минута, 14 секунд (8.06.2010 - 15:29) stichser написал(а):
Попробуй || поставить!Я конечно сам только новичек,но вроде надо двойные штуки ставить!

Спустя 6 минут, 17 секунд (8.06.2010 - 15:35) Basili4 написал(а):
preg_match не ругается

Спустя 6 минут, 3 секунды (8.06.2010 - 15:41) ApuktaChehov написал(а):
preg_match("/[^-а-z0-9,. ]+/i", $x);

Если в строку будет что то лишнее, оно вернет труе.

Спустя 2 дня, 1 час, 7 минут, 47 секунд (10.06.2010 - 16:49) noo написал(а):
Цитата (ApuktaChehov @ 8.06.2010 - 12:41)
preg_match("/[^-а-z0-9,. ]+/i", $x);

Если в строку будет что то лишнее, оно вернет труе.


Пропускает все. Сделал условие, что если тру, то выдавать ошибку. Пишу всякую каку, вроде <? ?> - все равно пропускает.

Спустя 2 минуты, 44 секунды (10.06.2010 - 16:52) ApuktaChehov написал(а):
Это выражение пытается искать хотя бы один символ, который не входит в перечень разрешенных. Если таковой находится, оно возвращает true. Показывайте код проверки.

P.S. Попробуйте проэкранировать точку в символьном класе, я не уверен что она считается строковым литералом.

Спустя 8 минут, 3 секунды (10.06.2010 - 17:00) noo написал(а):
все равно пропускает. Вот одна из проверок:
 elseif (preg_match("/[^-а-z0-9,]+/i", $_POST['name'])==true)  {echo "<br>Неверный формат сообщения";}

Спустя 17 минут, 8 секунд (10.06.2010 - 17:17) ApuktaChehov написал(а):
Вот это работает.

$str = 'asldkjg, .<?';
if(preg_match('/[^-a-z0-9,. ]+/i', $str))
echo('Что за символ?');

Спустя 35 минут, 16 секунд (10.06.2010 - 17:52) noo написал(а):
через доп переменную сработало:
if(preg_match('/[^-a-z0-9,. ]+/i', $name))
echo('Что за символ?');


Но мне ж еще русские символы нужны + большие/маленькие буквы.

добавил:
if(preg_match('/[^-а-Яa-Z0-9,. ]+/i', $name))

Опять все пропускает. В чем ошибка?

Спустя 30 минут, 39 секунд (10.06.2010 - 18:23) Bezdna написал(а):
if(!preg_match("/^[0-9A-ZА-Я\,\:\s]+$/i", $name))
echo('Что за символ?');


+ добавка, чтобы не мучать ж... http://www.regexpr.ru/

Спустя 1 час, 12 минут, 41 секунда (10.06.2010 - 19:35) ApuktaChehov написал(а):
А зачем экранировать запятую и двоеточие? И зачем допускать любые пропуски между символами? По моему достаточно просто пробелов.

Bezdna мы с тобой описали противоположные выражения, которые выполняют одинаковые функции. wink.gif

noo [^-а-Яa-Z0-9,. ] так делать нельзя. Символ i в конце, как раз и говорить, что регистр букв учитываться не должен.

Спустя 6 минут, 5 секунд (10.06.2010 - 19:41) noo написал(а):
Цитата (Bezdna @ 10.06.2010 - 15:23)
if(!preg_match("/^[0-9A-ZА-Я\,\:\s]+$/i", $name))
echo('Что за символ?');


+ добавка, чтобы не мучать ж... http://www.regexpr.ru/

На вашем же:
http://www.regexpr.ru/?pattern=%2F%5E%5B0-...ED%F1%EA%E8%E9+
совпадений не найдено

Спустя 3 минуты, 43 секунды (10.06.2010 - 19:45) ApuktaChehov написал(а):
noo. Тот сайт проверяет корректность выражение, а не фактор его использования в PHP.
И мое выражение и выражение Bezdna работают. Берите и используйте.
А если у вас недостаточно знаний, учитесь, потому как никто не будет это делать за вас.

Спустя 9 минут, 10 секунд (10.06.2010 - 19:54) noo написал(а):
Цитата (ApuktaChehov @ 10.06.2010 - 16:45)
noo. Тот сайт проверяет корректность выражение, а не фактор его использования в PHP.
И мое выражение и выражение Bezdna работают. Берите и используйте.
А если у вас недостаточно знаний, учитесь, потому как никто не будет это делать за вас.

Я очень благодарен вам за то, что вы вообще откликнулись мне помочь.
По рабочему варианту постараюсь разобраться что какой символ означает.

Если же вы мне не верите, то попробуйте запустить:
<? if(!preg_match("/^[0-9A-ZА-Я\,\:\s]+$/i", "Вот такое выражение  "))
echo('Что за символ?');
else
echo 'все норм';
?>


Спустя 2 минуты, 56 секунд (10.06.2010 - 19:57) ApuktaChehov написал(а):
Все работает. Выдает что все норм.

Спустя 2 минуты, 19 секунд (10.06.2010 - 20:00) noo написал(а):
Цитата (ApuktaChehov @ 10.06.2010 - 16:57)
Все работает. Выдает что все норм.

ничо се smile.gif
а у меня на хосте то же самое, но:
http://fl-lessons.ru/re.php

Спустя 5 минут, 27 секунд (10.06.2010 - 20:05) ApuktaChehov написал(а):
Смотрите в сторону кодировки файла.

Спустя 3 минуты, 1 секунда (10.06.2010 - 20:08) noo написал(а):
utf-8 без bom.
На денвере аналогично проверяю - тоже не пропускает все.
Блин, ну что за папасть smile.gif что делать?)

Спустя 1 минута, 16 секунд (10.06.2010 - 20:09) ApuktaChehov написал(а):
В кодировке ANSI, т.е. Win1251, все работает.
На самом деле я и сам не знаю почему так sad.gif

Спустя 2 минуты, 49 секунд (10.06.2010 - 20:12) ApuktaChehov написал(а):
Копаем дальше, проблема именно с кириллицей.
Щас может "батьки" подтянутся научат нас smile.gif

Причем не со всеми символами. Сейчас я нашел, что оно криво работает с буковой Ы и Т и Р

Спустя 3 минуты, 51 секунда (10.06.2010 - 20:16) noo написал(а):
Да не, с utf надо полюбас, о придумал, может кодировать в base64? но это как-то не из легких путей))

upd: да проверил, с анси и cp1521 работает

Спустя 20 минут, 1 секунда (10.06.2010 - 20:36) ApuktaChehov написал(а):
Нарыл. Нужно поставить модификатор u. Но это только для UTF8.
Вот так все работает:
preg_match("/^[0-9A-ZА-Я\,\:\s]+$/iu", "Вот такое выражение "))


P.S. Это выражение пропускает, если ввести одни пробелы.

Спустя 3 минуты, 51 секунда (10.06.2010 - 20:40) noo написал(а):
Цитата (ApuktaChehov @ 10.06.2010 - 17:36)
Нарыл. Нужно поставить модификатор u. Но это только для UTF8.
Вот так все работает:
preg_match("/^[0-9A-ZА-Я\,\:\s]+$/iu", "Вот такое выражение "))


P.S. Это выражение пропускает, если ввести одни пробелы.

опередил, я тоже нарыл.
Вот полезная ссылочка по этой теме:
http://webew.ru/posts/1836.webew

ребята, спасибо большое за помощь!

Спустя 3 минуты, 49 секунд (10.06.2010 - 20:44) ApuktaChehov написал(а):
Да еще и про букву ё забывать не надо.
preg_match("/^[0-9A-ZА-ЯёЁ\,\:\s]+$/iu", "Вот такое выражение "))

Спустя 35 минут, 3 секунды (10.06.2010 - 21:19) noo написал(а):
ApuktaChehov, ага, спасибо. Полезная тема получилась smile.gif

Спустя 10 минут, 55 секунд (10.06.2010 - 21:30) Gabriel написал(а):
Цитата
ничо се
а у меня на хосте то же самое, но:
http://fl-lessons.ru/re.php

а кодировку для браузера поставил?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.