Regexp действительная проверка электронной почты

Я пытаюсь проверить, является ли письмо действительным со следующим кодом регулярного выражения.

/[0-9A-Za-z-_.]{1,64}[\@][0-9a-zA-Z\-]{1,63}[\.][a-zA-Z\-]{2,24}/

Но в тестах я вижу, что недействительные письма, такие как test---@gmail.com или же test-.-@gmail.com или же test-.@gmail.com или же test.@gmail.com или же test__@gmail.com или же __--.test@gmail.com помечены как действительные.

Я думаю, что нет действительного адреса электронной почты. , _, — в начале или в конце, а не позади друг друга, как — или __ или -. или же .- …

Что я мог сделать, чтобы сделать это лучше?

0

Решение

Попробуй это:

^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$

по-другому:

^(|(([A-Za-z0-9]+)|([A-Za-z0-9]+)|([A-Za-z0-9]+(\.[_a-z0-9-]+)+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$

не совпадает:

test-.@gmail.com
test.@gmail.com
test__@gmail.com
__--.test@gmail.com
john__doe@gmail.com
john..doe@xuse.de
john--doe@xuse.de
test_test@gmail.com

матч:

12test21@gmail.com
1.test@gmail.com
test.test@gmail.com
2

Другие решения

Почему бы не использовать http://php.net/manual/en/function.filter-var.php

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}

Смотрите определение фильтра здесь. http://php.net/manual/en/filter.filters.validate.php

Проверяет, является ли значение действительным адресом электронной почты.

Как правило, это проверяет адреса электронной почты на соответствие синтаксису в RFC.
822, за исключением того, что комментарии и пробелы складываются и
доменные имена без точек не поддерживаются.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector