Regex email - как разрешить добавление символов в email? - PullRequest
5 голосов
/ 03 декабря 2011

Регулярные выражения всегда вызывают головную боль, и поиск в Google не очень помогает. В настоящее время я использую следующее выражение (preg_match): /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/

Однако, если я хочу разрешить электронные письма с символами плюса, это явно не сработает, например: foo+bar@domain.com

Как бы мне пришлось изменить свое выражение, чтобы это позволить? Заранее спасибо за помощь!

Ответы [ 3 ]

8 голосов
/ 03 декабря 2011

Вы должны просто использовать встроенное регулярное выражение PHP для проверки электронной почты, потому что оно охватывает все:

filter_var($email, FILTER_VALIDATE_EMAIL)

См. filter_var и FILTER_VALIDATE_EMAIL(или https://github.com/php/php-src/blob/master/ext/filter/logical_filters.c#L499 для настоящего зверя).

6 голосов
/ 03 декабря 2011

Ваше неправильное регулярное выражение может быть изменено на другое неправильное регулярное выражение:

/^[\w-]+(\.[\w+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/

, что позволяет использовать символ + там, где вы хотите.Но это все равно неправильно .

1 голос
/ 03 декабря 2011

Попробуйте добавить \+ в коллекцию символов []:

/^[_a-z0-9-]+(.[_a-z0-9-\+]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...