Вы должны быть очень осторожны при проверке адресов электронной почты. Я не говорю, что вы не должны этого делать, но вам нужно знать, что для написания 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.
Я подошел к этому^\ D + ([- +. '] \ D +) * \ S [^ \ @] + @ [^ \.] + [^ \.] \ D \ S + ([-. ] \ D +) * \. \ D \ S + ([-.] \ D +) * $, но все еще нуждается в работе. – boom123