Как указать регулярное выражение, чтобы отключить использование символов подчеркивания после знака @ в php для проверки электронной почты? - PullRequest
1 голос
/ 11 января 2011

В настоящее время следующее письмо в скрипте проверяется, даже если во второй части проверки правильности регулярного выражения после знака «@» нет подчеркиваний. Как сделать подчеркивание недействительным во второй части письма?

<?php
$email = 'firstname.lastname@a_aa.bbb.co_m';
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9]+([.][A-z0-9]+)*[.][A-z]{2,4}$/";

if (preg_match($regexp, $email)) {
    echo "Email address is valid.";
} else {
    echo "Email address is <u>not</u> valid.";
}
?>

Ответы [ 4 ]

2 голосов
/ 11 января 2011

не используйте [A-z] класс символов. Вместо этого используйте [a-zA-Z]. Используемый класс символов включает в себя: подчеркивание, обратные кавычки, квадратные скобки и т. Д.

Чтобы избежать путаницы, просто используйте [a-z] и укажите i (регистр * i чувствительный) флаг для вашего регулярного выражения:

$regexp = "/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9]+([.][a-z0-9]+)*[.][a-z]{2,4}$/i";

Также обратите внимание, что ваш первый класс символов: [^0-9] соответствует любому символу, кроме цифр ascii, то есть любому. Это, вероятно, не то, что вы хотели.

1 голос
/ 11 января 2011

Если вы посмотрите сюда, то увидите, что этот вопрос задавался много-много раз.Краткий ответ: вы не можете проверить адрес электронной почты с помощью регулярного выражения.

Лучшее, что вы могли бы сделать, это убедиться, что в правой части символа @ есть MX, который будет обрабатывать его.Даже тогда есть некоторые правила, которые вы должны знать.

Раньше вы могли VRFY адрес электронной почты, спрашивая MX, будет ли он обрабатывать почту, но благодаря спаму, который в основном был переключенлет назад.

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

Вы должны также использовать классы символов \ w, а не az в качестве символов с акцентами и т.д.склонны к провалу ...

1 голос
/ 11 января 2011

Вы должны использовать [a-zA-Z] вместо [A-z] . Обратите внимание, что в своем регулярном выражении вы использовали заглавные буквы A для малого z . Существуют и другие символы от Caps Z до маленьких a , которые включают подчеркивание, которое я предполагаю.

РЕДАКТИРОВАТЬ после комментария в основном вопросе, ниже приводится регулярное выражение, которое практически проверяет все варианты использования для идентификатора электронной почты -

"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
1 голос
/ 11 января 2011

Вы, вероятно, имели в виду a-zA-Z вместо A-z (который принимает любые символы от A до z, включая несколько не алфавитных символов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...