2012-02-02 2 views
3

Я хочу очень рыхлый регулярное выражение для проверки писемочень свободно по электронной почте регулярное выражение

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

[email protected]

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

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

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

+0

Я подошел к этому^\ D + ([- +. '] \ D +) * \ S [^ \ @] + @ [^ \.] + [^ \.] \ D \ S + ([-. ] \ D +) * \. \ D \ S + ([-.] \ D +) * $, но все еще нуждается в работе. – boom123

ответ

2

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

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

Возможно, у вас есть пользователь, который (достаточно глупый, чтобы получить) адрес электронной почты, содержащий указанный знак @. , например. "[email protected]"@example.com

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

В вашем примере: £££τεστ[email protected]!"¬ilγμαιλ.ψψομcomd**%%$ фактически недействителен, потому что domain names may only contain letters (a-z), numbers, dots and hyphens. Так предполагается, что вы делаете матч регистронезависимый и вы хотите проверить действительные доменные имена, вы должны быть в состоянии упростить выражение (взяты из Вашего комментария) к

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

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

+0

благодарю вас за ответ. Но так как вы можете покупать имена доменов, например, τεστ.com, [email protected]τεστ.com, не должны быть действительным адресом электронной почты?Как я могу изменить регулярное выражение, чтобы поддержать это? – boom123

+0

Я подошел к этому^\ D + ([- +. '] \ D +) * \ S [^ \ @] + @ [^ \.] \ S \ D \ S + [a-z0-9 \ - \. ] * $ – boom123

+0

Чтобы обрабатывать интернационализированные доменные имена, вам необходимо сначала преобразовать их в Punycode или вернуться к более базовой проверке. 'τεστ.com' фактически не существует, это всего лишь представление реального домена (который будет буквенно-цифровым и дефисным). См. Http://en.wikipedia.org/wiki/Punycode. Когда дело доходит до внутренней обработки, вероятно, более надежно работать с ASCII-представлением международных доменов. Таким образом, вы можете конвертировать имена доменов, а затем проверить. – SimonMayer

Смежные вопросы