|
|
автор: Lake (18.09.2006 в 18:17) |
|
|
для: cheops
(16.09.2006 в 15:43)
| | О, большое аригато за такой подробный и понятный ответ! :) Теперь я хоть что-то понимаю в регулярных выражениях, и все благодаря Вам! ;) | |
|
|
|
|
|
|
|
для: Lake
(16.09.2006 в 15:00)
| | 1) Да, в Perl-регулярных выражениях нужно всегда обозначать границу, в качестве границы можно использовать любой символ, подробнее о них можно почитать в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=24280. Экранировать следует символы, которые имеют специальное значение... чтобы не мучаться с их запоминиманием можно использовать функцию preg_quote() - она экранирует нужные символы сама
<?php
$login = "`";
if(preg_match("#[".preg_quote("\"'`\\|></%&")."]#",$login)){echo 'no';}
else{echo 'yes';}
?>
|
2) Дело в том, что когда вы используете квадратные скобки - это один символ и поиск одного символа проходит нормально. Если вы сравниваете со всем выражением, нужно указывать, границы выражения, привязать регулярное выражение к началу ^ и концу $ строки:
<?php
$login = "`";
if(!preg_match("#^[\"'`\\\|></%&]{4,25}$#",$login)){echo 'no';}
else{echo 'yes';}
?>
|
| |
|
|
|
|
автор: Lake (16.09.2006 в 15:00) |
|
|
для: cheops
(16.09.2006 в 13:12)
| | Все работает, спасибо! :) Хм, т.е. любое регулярное выражение нужно с обоих сторон # окружать? И, кстати, можете подсказать, перед какими именно спец. символами внутри рег. выражения нужно ставить \ ? Я же из принципа "предосторожность лишней не бывает" их перед каждым... гм.. :) А оно может и не нужно было...
И еще маааленький вопросик... может стоило отдельной темой спросить, но он совсем уж маленький и к теме в общем-то относится... Можно ли к этому выражению прилепить проверку на длинну? Ну, т.е. пропускать только если логин не содержит вышеобозначенных символов, и при этом не короче 4 и не длиннее 25 символов? В справочнике говорится про фигурные скобки, но изменение выражения до "#([\"'`\\\|></%&]){4,25}#" нужного результата не дает, а как еще прилепить к нему эти скобки мне в голову не приходит. :( | |
|
|
|
|
|
|
|
для: Lake
(16.09.2006 в 03:13)
| | У вас границы регулярного выражения не указаны
<?php
$login = "`";
if(preg_match("#[\"'`\\\|></%&]#",$login)){echo 'no';}
else{echo 'yes';}
?>
|
| |
|
|
|
|
автор: Lake (16.09.2006 в 03:13) |
|
| Делаю авторизацию, хочу чтобы в нике нельзя было использовать следующие символы: ' " ` / | \ > < % &
Но с регулярными выражениями я не в ладах, мягко говоря... Практически методом тыка получилось вот это:
if(preg_match("[\"\'\`\\\|\>\<\/\%\&]",$login)){echo 'no';}
else{echo 'yes';}
|
Но оно не работает (да и кто бы сомневался :) ). Точнее, что в логине есть эти символы, что нет, все равно выдает "yes". Подскажите, что я не так делаю, плз! | |
|
|
|
|