|
|
|
| Привет! Прошу помочь с регулярными выражениями, а вернее проверить их на корректность и целесообразность:
<?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;
?>
|
Спасибо! | |
|
|
|
|
|
|
|
для: tima2010
(20.01.2012 в 10:28)
| | Довольно много зависит от ваших целей и насколько критичен неправильный ввод. | |
|
|
|
|
|
|
|
для: cheops
(20.01.2012 в 13:20)
| | Цель - проверка вводимых данных во избежании некорректного отображения или попадания ненужных символов в sql запрос.
Критичность = Цель + Безопасность
будет не очень красиво если пользователь оставит о себе информацию:
Имя - !Суп3р М@n!
Сайт - Какой еще сайт? Зачем мне сайт? :D
Телефон - Nokia 3310
Дата рождения - 1987-2000 + 1 вот она
|
| |
|
|
|
|
|
|
|
для: tima2010
(20.01.2012 в 13:29)
| | 1987-2000 + 1
Вот так Вы и без проверки не сможете записать в базу если у Вас тип поля DATETIME....
Будет ошибка при выполнении запроса
!Суп3р М@n!
А это может быть просто логином... Вы же не можете предугадать какие тараканы дохлые в голове у пользователя.... Идиотов много на просторах инета встречается... | |
|
|
|
|
|
|
|
для: Slo_Nik
(20.01.2012 в 19:21)
| | да это все для примера написал выше, интересует вообще регулярные выражения правильно прописаны?
проверка символов от начала и до конца строки или не правильно прописаны? | |
|
|
|
|
|
|
|
для: tima2010
(20.01.2012 в 10:28)
| | А сайт =H-T-T-P/:/:/#URL= вас устроит? Ваше РВ его пропустит.
А телефон (0(1(2)3)4) устроит?
А дата 99.99.9999? | |
|
|
|
|
|
|
|
для: Sfinks
(20.01.2012 в 20:10)
| | хорошо, просто скажите пожалуйста корректно ли они написаны лишь для того чтобы введенные данные соответствовали правилам. При ответе на вопрос выключаем логику для чего и зачем.
спасибо! | |
|
|
|
|
|
|
|
для: tima2010
(20.01.2012 в 21:16)
| | Я вам в предыдущем посте привел примеры строк, которые ваша проверка пропустит.
Теперь включаем логику. По моей логике это не корректные урл, телефон и дата. А по вашей?
Для проверки корректной урл тут много примеров уже было... Пошукайте по форуму. Вот наипростейшая, хоть как-то похожая на урл:
#^([a-z\d\-_]+\.)+[a-z]{2,5}$#i
|
Для проверки телефона, если вам хочется и скобки и пробелы нужно РВ усложнять. Но проще чтоб тупо вводили одни цифры и проверять функцией is_numeric().
Для проверки даты этого не достаточно.... Нужно еще разбить на 3 части по точкам и проверить функцией mktime()
Ну это по минимуму. | |
|
|
|
|
|
|
|
для: Sfinks
(20.01.2012 в 21:55)
| | Спасибо, а сами рег выражения корректно проверяют символы от начала до конца строки? | |
|
|
|
|
|
|
|
для: tima2010
(20.01.2012 в 22:23)
| | символы корректно | |
|
|
|
|
|
|
|
для: Sfinks
(20.01.2012 в 23:18)
| | Большое спасибо! Все что я хотел знать.
По счет логики конечно Вы и остальные ответившие люди правы. Чтобы корректно контролировать вводимые данные, эти рег выражения не подходят.
Данную проверку делаю чтобы была и не пропускала лишние символы в sql запрос. | |
|
|
|