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

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

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Корректность регулярный выражений
 
 автор: tima2010   (20.01.2012 в 10:28)   письмо автору
 
 

Привет! Прошу помочь с регулярными выражениями, а вернее проверить их на корректность и целесообразность:


<?php
/* Проверка имени */
$name $_POST['name'];
if (!
preg_match ("/^[а-яA-Яa-zA-Z0-9\s-]+$/"$name)) {
    
$error .= "Только русские буквы, английские буквы, цифры, пробел, тире! <br>";
} elseif(
mb_strlen($name) > 20) {
    
$error .= "Не более 20 символов! <br>";
}

/* Проверка URL */
$url $_POST['url'];
if (!
preg_match ("/^[а-яA-Яa-zA-Z0-9-:\/.#?=]+$/"$url)) {
    
$error .="Недопустимые символы в адресе сайта! <br>";
}

/* Проверка телефона */
$phone $_POST['phone'];
if (!
preg_match ('/^[0-9-+\s()]+$/'$phone)) {
    
$error .="Можно использовать цифры, пробелы, тире и скобки <br>";
} elseif(
mb_strlen($phone) > 25) {
    
$error .= "Не более 25 символов! <br>";
}

/* Проверка даты */
$date $_POST['date'];
$pattern '/^[\d]{2}\.[\d]{2}\.[\d]{4}$/';
if(
preg_match($pattern$date) != '1') {
    
$error .= 'Неверный формат даты пример - дд.мм.гггг <br>';
}

echo 
$error;
?>


Спасибо!

  Ответить  
 
 автор: cheops   (20.01.2012 в 13:20)   письмо автору
 
   для: tima2010   (20.01.2012 в 10:28)
 

Довольно много зависит от ваших целей и насколько критичен неправильный ввод.

  Ответить  
 
 автор: tima2010   (20.01.2012 в 13:29)   письмо автору
 
   для: cheops   (20.01.2012 в 13:20)
 

Цель - проверка вводимых данных во избежании некорректного отображения или попадания ненужных символов в sql запрос.

Критичность = Цель + Безопасность

будет не очень красиво если пользователь оставит о себе информацию:
Имя - !Суп3р М@n!
Сайт - Какой еще сайт? Зачем мне сайт? :D
Телефон - Nokia 3310
Дата рождения - 1987-2000 + 1 вот она 

  Ответить  
 
 автор: Slo_Nik   (20.01.2012 в 19:21)   письмо автору
 
   для: tima2010   (20.01.2012 в 13:29)
 

1987-2000 + 1
Вот так Вы и без проверки не сможете записать в базу если у Вас тип поля DATETIME....
Будет ошибка при выполнении запроса

!Суп3р М@n!
А это может быть просто логином... Вы же не можете предугадать какие тараканы дохлые в голове у пользователя.... Идиотов много на просторах инета встречается...

  Ответить  
 
 автор: tima2010   (20.01.2012 в 19:53)   письмо автору
 
   для: Slo_Nik   (20.01.2012 в 19:21)
 

да это все для примера написал выше, интересует вообще регулярные выражения правильно прописаны?
проверка символов от начала и до конца строки или не правильно прописаны?

  Ответить  
 
 автор: Sfinks   (20.01.2012 в 20:10)   письмо автору
 
   для: tima2010   (20.01.2012 в 10:28)
 

А сайт =H-T-T-P/:/:/#URL= вас устроит? Ваше РВ его пропустит.
А телефон (0(1(2)3)4) устроит?
А дата 99.99.9999?

  Ответить  
 
 автор: tima2010   (20.01.2012 в 21:16)   письмо автору
 
   для: Sfinks   (20.01.2012 в 20:10)
 

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

  Ответить  
 
 автор: Sfinks   (20.01.2012 в 21:55)   письмо автору
 
   для: tima2010   (20.01.2012 в 21:16)
 

Я вам в предыдущем посте привел примеры строк, которые ваша проверка пропустит.
Теперь включаем логику. По моей логике это не корректные урл, телефон и дата. А по вашей?

Для проверки корректной урл тут много примеров уже было... Пошукайте по форуму. Вот наипростейшая, хоть как-то похожая на урл:
#^([a-z\d\-_]+\.)+[a-z]{2,5}$#i

Для проверки телефона, если вам хочется и скобки и пробелы нужно РВ усложнять. Но проще чтоб тупо вводили одни цифры и проверять функцией is_numeric().
Для проверки даты этого не достаточно.... Нужно еще разбить на 3 части по точкам и проверить функцией mktime()
Ну это по минимуму.

  Ответить  
 
 автор: tima2010   (20.01.2012 в 22:23)   письмо автору
 
   для: Sfinks   (20.01.2012 в 21:55)
 

Спасибо, а сами рег выражения корректно проверяют символы от начала до конца строки?

  Ответить  
 
 автор: Sfinks   (20.01.2012 в 23:18)   письмо автору
 
   для: tima2010   (20.01.2012 в 22:23)
 

символы корректно

  Ответить  
 
 автор: tima2010   (20.01.2012 в 23:32)   письмо автору
 
   для: Sfinks   (20.01.2012 в 23:18)
 

Большое спасибо! Все что я хотел знать.
По счет логики конечно Вы и остальные ответившие люди правы. Чтобы корректно контролировать вводимые данные, эти рег выражения не подходят.
Данную проверку делаю чтобы была и не пропускала лишние символы в sql запрос.

  Ответить  
Rambler's Top100
вверх

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