очень свободное регулярное выражение электронной почты - PullRequest
3 голосов
/ 02 февраля 2012

Мне нужно очень свободное регулярное выражение для проверки писем

Некоторые примеры:

anyCharacter@anycharacter.anycharacter

Пробелы будут считаться недействительными (включая те, что в конце иначало), более одной @ или точка после @:

  1. $ £ "$ @ $ £" $ @ kdjsad $ "£ $ .dsad343 - действительный
  2. ξδησκξδη@φδσαφδσ.φδσφ - действительный (все символы utf-8 должны быть действительными)
  3. hdjsh jdhsd.gmail.com - недействительный
  4. ldksl .gmail.com - недействительно
  5. dldks.gma il.com - недействительно
  6. test @ .gmail.com - недействительно
  7. £££ τεστtest @ gma! "¬ilγμαιλ.ψψομcomd ** %% $ - действует

Я пытаюсь изменить это ^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$, но у меня есть некоторые проблемы, и ваша помощь будет оценена.

1 Ответ

2 голосов
/ 03 февраля 2012

Вы должны быть очень осторожны при проверке адресов электронной почты. Я не говорю, что вы не должны этого делать, но вы должны знать, что написать 100% точную проверку адреса электронной почты будет чрезвычайно сложно, и, имея не совсем совершенную проверку, вы все равно можете допустить недействительность адреса и (что еще хуже) мешают законным пользователям.

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

Возможно, у вас есть пользователь, который (достаточно глуп, чтобы получить) адрес электронной почты, содержащий знак @ в кавычках. например "the-address-has-two-@-symbols"@example.com

Infact, вы можете иметь практически любой символ, который вы можете придумать в не доменной части адреса (если они указаны в кавычках), могут появляться даже пробелы: "Forename Surname"@example.com

В вашем примере: £££τεστtest@gma!"¬ilγμαιλ.ψψομcomd**%%$ на самом деле будет недействительным, поскольку доменные имена могут содержать только буквы (a-z), цифры, точки и дефисы . Поэтому, если вы делаете совпадение без учета регистра и хотите проверить правильность доменных имен, вы сможете упростить выражение (взятое из вашего комментария) до

^\D+([-+.']\D+)*\S[^\@]+@[a-z0-9]+[a-z0-9\-\.]*$

Вы также можете продолжить проверку домена, но для ее правильного выполнения потребуется чтение RFC 2396 .

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