2013-05-09 3 views
12

Не уверен, есть ли доступное решение, но не удалось найти. Так что прошу еще раз.Regex для проверки международной электронной почты

Я пишу валидатор электронной почты. Это должно проверить все хорошо сформированные электронные письма (это всего лишь один уровень проверки, чтобы проверить, что письмо хорошо сформировано). Теперь, когда мой код является международным кодом, я также должен поддерживать не латинские символы. Как написать для этого наиболее эффективное Regex?

Международные Письма: http://en.wikipedia.org/wiki/International_email

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

  1. 伊昭傑 @ 郵件 商務
  2. राम@मोहन.ईन्फो
  3. юзер@екзампл.ком
  4. θσερ @ εχαμπλε.ψομ

Он должен иметь возможность подтвердить все перечисленные выше форматы.

+10

'[^ \ s @] + @ [^ \ s @] + \. [^ \ S @] +'. (Подтверждено на www.regexpal.com, чтобы точно соответствовать всем четырем этим письмам.) Не становитесь более сложными, потому что единственный способ узнать адрес электронной почты ДЕЙСТВИТЕЛЬНО правильно, это отправить его по электронной почте, так или иначе, так что быть разрешительным. – Patashu

+3

Вместо того, чтобы создавать регулярные выражения электронной почты, в которых говорится, что разрешено (как мы обычно делаем для английских символов), создайте регулярное выражение, в котором указано, что запрещено (например, 'x @ .xyz',' x @ a..b', 'x @ -y', 'x @ y-', 'x @ a - b' и т. д. –

+0

Я согласен с ring0. Полная юридическая форма того, что может быть адресом электронной почты, не может быть действительно подтверждена с помощью regex - это требует больше реального анализатора.Я бы предположил, что вы просто избавились от наиболее распространенных пропусков. – jfriend00

ответ

7

Причина, по которой проверка подлинности электронной почты с помощью регулярного выражения настолько слаба, потому что она неэффективна. Там является спецификацией для синтаксиса адреса электронной почты, но the regexp to check it is so long, it's impractical. Кроме того, поставщики электронной почты более строги в реализации синтаксиса, чем фактическая спецификация. Электронная почта может считаться действительной, поскольку спецификация говорит, что она есть, но недействительна в соответствии с поставщиком.

Это также является причиной того, что электронные письма активации существуют, поскольку единственный способ проверить, действительно ли письмо является действительным, существующим и в настоящее время используется, - это отправить ему что-то, как правило, уникальный код активации или ссылку. Только если этот уникальный код активации или ссылка, только отправленная на это письмо, будет использоваться, будет считаться действительным.

До тех пор рассмотрите более лёгкий подход при проверке писем, проверяя, есть ли имя пользователя, @ и части домена. Кроме того, зачем вообще регистрироваться с использованием ложного сообщения? Если они это сделают, они не получат ссылку активации и не смогут приступить к созданию учетной записи.

+0

Это скорее реализация, чтобы проверить, правильно ли сформирована электронная почта, прежде чем отправлять/вкладывать в то, что когда-либо было логикой бизнеса. Это не связано с подпиской –

+0

@KD. в приведенной выше ссылке объясняется, что RegExp на 99% совершенен, а также спецификация. Читай дальше. – Joseph

+0

Ya thats right. Последнее регулярное выражение действительно огромно, но работает хорошо. Но проблема в том, что мне нужна поддержка, которая поддерживает международные электронные письма, например, 伊昭傑 @ 郵件. 商務 –

0

@Patashu Большое спасибо. Я улучшил ваш Regex немного, и теперь это абсолютно устраивает мои потребности:

^([^@\s\."'\(\)\[\]\{\}\\/,:;]+\.)*[^@\s\."'\(\)\[\]\{\}\\/,:;][email protected][^@\s\."'\(\)\[\]\{\}\\/,:;]+(\.[^@\s\."'\(\)\[\]\{\}\\/,:;]+)+$ 
0

В случае Java, это работает очень хорошо для меня.

"^[\\p{L}\\p{N}\\._%+-][email protected][\\p{L}\\p{N}\\.\\-]+\\.[\\p{L}]{2,}$" 

Это не позволяет IP-адреса, после @, но наиболее действительного адреса электронной почты в от из [email protected] может быть подтверждены с ним. \p{L} проверяет UTF-буквы и \p{N} проверяет номера UTF. Вы можете проверить this doc для получения дополнительной информации.

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