|
|
|
| Вот тестировал шаблон мейла, которым пользуются практически все и натолкнулся на такую вещь. В слове которое написано до собаки оказывается можно употреблять любые символы, главное чтоб последний символ был допустимыми, а остальное можно лепить что угодно, в том числе и любое количество собак. Так и до скрипта не далеко. Глядя на регулярное выражение, создается впечатление, что этого не должно быть. Может кто подскажет как с этим бороться. Я понимаю, что сначала можно проверить на допустимые символы, а потом на шаблон, но может можно шаблон подправить трак, что он не будет пропускать ошибки.
<?php
$mail = "something@server.com"; // Ошибок нет
$mail = "@@@!:;#$%^&*()-=[]/\.,_+g@server.com"; // Ошибок тоже как ни странно нет
if(preg_match("/[0-9a-zA-z_]+@[0-9a-zA-Z_^\.]+\.[a-z]{2,3}/i", $mail))
echo("Ошибок нет");
else
echo("Ошибка");
?> | |
|
|
|
|
|
|
|
для: kievigor
(09.05.2006 в 14:52)
| | if(preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $mail)) | |
|
|
|
|
|
|
|
для: isset
(09.05.2006 в 15:02)
| | Спасибо.
Маленький нюанс и работает правильно. Просто этот пример приведен во многих статьях и скриптах именно в таком виде как я его показал. Странно что все переписывают друг у друга с ошибкой и никто не проверяет его работу. | |
|
|
|
|
|
|
|
для: isset
(09.05.2006 в 15:02)
| | Все таки нужно еще добавить черточку, а то часто встречаются такие мейлы
some-thing@ser-ver.com
preg_match("/^[0-9a-z_\-]+@[0-9a-z_\-^\.]+\.[a-z]{2,3}$/i", $mail) | |
|
|
|
|
|
|
|
для: kievigor
(09.05.2006 в 16:39)
| | Кстати, еще бывают адреса почты типа
mr.good@mail.ru, тоесть с точкой до собачки
поэтому предлагаю еще дописать
preg_match("/^[0-9a-z_\-\.]+@[0-9a-z_\-^\.]+\.[a-z]{2,3}$/i", $mail)
А еще, хотя я точно не уверен, имя до собачки должно быть не менее 3 символов, но я могу ошибаться... | |
|
|
|
|
|
|
|
для: kievigor
(09.05.2006 в 16:39)
| | любой такой фильтр допускает ошибки как первого, так и второго рода.
Т.е. отвергает некоторое количество реальных адресов и пропускает некоторое количество несуществующих.
Достаточно вспомнить об адресах на доменах первого уровня или на доменах *.info | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2006 в 18:17)
| | >Достаточно вспомнить об адресах на доменах первого уровня
>или на доменах *.info
Или .travel, поэтому {2,3} лучше исправить на {2,6} - будет покрайней мере не хуже
<?php
preg_match("/^[-0-9a-z_\.]+@[-0-9a-z_]+\.[a-z]{2,6}$/i", $mail)
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(13.05.2006 в 11:27)
| | Кстати, а что насчёт адреслв почты на домене третбего и т.д. уровня? Т.ч. ещё и точку надо разрешить бы.
<?php
preg_match("/^[-0-9a-z_\.]+@[-0-9a-z_\.]+\.[a-z]{2,6}$/i", $mail)
?>
|
| |
|
|
|
|
|
|
|
для: Sergey89
(16.05.2006 в 17:26)
| | А как сделать, чтобы разрешало оставить поле пустым, но если что-то написано, то проверялось вышенаписанным регулярным выражением? | |
|
|
|
|
|
|
|
для: Freddie_X
(18.05.2006 в 23:12)
| | Для этого необходимо проверить сначала пусто поле или нет, а если нет - проверять его при помощи регулярного выражения
<?php
if(!empty($_POST['mail']))
{
if(preg_match("/^[-0-9a-z_\.]+@[-0-9a-z_\.]+\.[a-z]{2,6}$/i", $_POST['mail']))
{
exit("Не верный формат URL-запроса");
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(18.05.2006 в 23:21)
| | А может лучше сделать так, чтобы прямо в регулярном выражении допускалось "пусто" ЛИБО
"/^[-0-9a-z_\.]+@[-0-9a-z_\.]+\.[a-z]{2,6}$/i"
|
? | |
|
|
|