Java текст соответствия электронной почты - PullRequest
0 голосов
/ 08 февраля 2012

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

public class x 
{ 
    public static void main(String[] args) 
    { 
        String pattern = "[a-zA-Z0-9]+[a-zA-Z0-9._]*[a-zA-Z0-9]*+@[a-zA-Z0-9]*[.]([a-z][a-z]|[a-z][a-z][a-z])";
        String text    = "g@gmail.co";
        System.out.println(text.matches(pattern));
    }
}

Я пытался написать подтверждение по электронной почте.Где я не прав и что я мог оптимизировать возможно?Спасибо.

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

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

Как вы видите из ответов, данных другими людьми, любое регулярное выражение, которое пытается заняться чем-то таким сложным, неизбежно будет непостижимо для человека; так что вы никогда не можете быть уверены, что это правильно.

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

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

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

1 голос
/ 08 февраля 2012

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

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b

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

0 голосов
/ 08 февраля 2012

Вы можете попробовать это:

public class EmailValidator{

      private Pattern pattern;
      private Matcher matcher;

      private static final String EMAIL_PATTERN = 
                   "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@
                   [A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

      public EmailValidator(){
          pattern = Pattern.compile(EMAIL_PATTERN);
      }

      /**
       * Validate hex with regular expression
       * @param hex hex for validation
       * @return true valid hex, false invalid hex
       */
      public boolean validate(final String hex){

          matcher = pattern.matcher(hex);
          return matcher.matches();

      }
}

шаблон должен быть:

^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$

если хочешь больше объяснений, скажи мне.

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