Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите с проверкой на опасные символы

Сообщения:  [1-5] 

 
 автор: Lake   (18.09.2006 в 18:17)
 
   для: cheops   (16.09.2006 в 15:43)
 

О, большое аригато за такой подробный и понятный ответ! :) Теперь я хоть что-то понимаю в регулярных выражениях, и все благодаря Вам! ;)

   
 
 автор: 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}#" нужного результата не дает, а как еще прилепить к нему эти скобки мне в голову не приходит. :(

   
 
 автор: cheops   (16.09.2006 в 13:12)   письмо автору
 
   для: 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". Подскажите, что я не так делаю, плз!

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования