Проверка электронной почты Java с использованием Regex

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

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

1. Простое регулярное выражение

Регулярное выражение: ^(.+)@(.+)$

Это самый простой вариант, и он касается только символа '@'. До и после символа '@' может быть любое количество символов. Давайте рассмотрим небольшой пример, чтобы понять, что я имею в виду.

List emails = new ArrayList();emails.add("user@domain.com");emails.add("user@domain.co.in");emails.add("user1@domain.com");emails.add("user.name@domain.com");emails.add("user#@domain.co.in");emails.add("user@domaincom");//Invalid emailsemails.add("user#domain.com");emails.add("@yahoo.com");String regex = "^(.+)@(.+)$";Pattern pattern = Pattern.compile(regex);for(String email : emails){Matcher matcher = pattern.matcher(email);System.out.println(email +" : "+ matcher.matches());}

Вывод программы.

user@domain.com : trueuser@domain.co.in : trueuser1@domain.com : trueuser.name@domain.com : trueuser#@domain.co.in : trueuser@domaincom : trueuser#domain.com : false@yahoo.com : false

Этот шаблон доступен в классе EmailValidator Common lang. Так что если он вам подходит, вы можете напрямую использовать этот класс.

2. Добавление ограничений на имя пользователя

Регулярное выражение: ^[A-Za-z0-9+_.-]+@(.+)$

В этом регулярном выражении мы добавили некоторые ограничения на часть имени пользователя в адресе электронной почты. Ограничения в вышеприведенном регулярном выражении следующие:

  • [AZ] символы разрешены
  • [az] разрешены символы
  • [0-9] разрешенные цифры
  • Кроме того, электронное письмо может содержать только точку(.), тире(-) и подчеркивание(_).
  • Остальные символы не допускаются.

Давайте проверим некоторые адреса электронной почты на соответствие приведенному выше регулярному выражению.

List emails = new ArrayList();emails.add("user@domain.com");emails.add("user@domain.co.in");emails.add("user1@domain.com");emails.add("user.name@domain.com");emails.add("user_name@domain.co.in");emails.add("user-name@domain.co.in");emails.add("user@domaincom");//Invalid emailsemails.add("@yahoo.com");String regex = "^[A-Za-z0-9+_.-]+@(.+)$";Pattern pattern = Pattern.compile(regex);for(String email : emails){Matcher matcher = pattern.matcher(email);System.out.println(email +" : "+ matcher.matches());}

Вывод программы.

user@domain.com : trueuser@domain.co.in : trueuser1@domain.com : trueuser.name@domain.com : trueuser_name@domain.co.in : trueuser-name@domain.co.in : trueuser@domaincom : true@yahoo.com : false

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

^[A-Z0-9+_.-]+@[A-Z0-9.-]+$

3. Регулярное выражение для проверки RFC-5322

Регулярное выражение: ^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$

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

При вставке адреса электронной почты в строку, передаваемую другой программе, обязательно экранируйте конфиденциальные символы, чтобы предотвратить бреши в системе безопасности, такие как атаки с использованием SQL-инъекций.

List emails = new ArrayList();emails.add("user@domain.com");emails.add("user@domain.co.in");emails.add("user.name@domain.com");emails.add("user?name@domain.co.in");emails.add("user'name@domain.co.in");//Invalid emailsemails.add("@yahoo.com");String regex = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$";Pattern pattern = Pattern.compile(regex);for(String email : emails){Matcher matcher = pattern.matcher(email);System.out.println(email +" : "+ matcher.matches());}

Вывод программы.

user@domain.com : trueuser@domain.co.in : trueuser.name@domain.com : trueuser?name@domain.co.in : trueuser'name@domain.co.in : true@yahoo.com : false

4. Ограничьте начальные, конечные и последовательные точки

Regex : ^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$

И локальная часть, и доменное имя могут содержать одну или несколько точек, но никакие две точки не могут стоять рядом друг с другом. Кроме того, первый и последний символы в локальной части и в доменном имени не должны быть точками:

List emails = new ArrayList();emails.add("user@domain.com");emails.add("user@domain.co.in");emails.add("user.name@domain.com");emails.add("user'name@domain.co.in");//Invalid emailsemails.add(".username@yahoo.com");emails.add("username@yahoo.com.");emails.add("username@yahoo..com");String regex = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$";Pattern pattern = Pattern.compile(regex);for(String email : emails){Matcher matcher = pattern.matcher(email);System.out.println(email +" : "+ matcher.matches());}

Вывод программы.

user@domain.com : trueuser@domain.co.in : trueuser.name@domain.com : trueuser'name@domain.co.in : true.username@yahoo.com : falseusername@yahoo.com. : falseusername@yahoo..com : false

5. Ограничить длину символов в домене верхнего уровня [рекомендуется]

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

Допустим, доменные имена такие, как secondlevel.com или thirdlevel.secondlevel.com. Домен верхнего уровня(.com в этих примерах) должен состоять только из двух-шести букв.

Regex : ^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$

List emails = new ArrayList();emails.add("user@domain.com");emails.add("user@domain.co.in");emails.add("user.name@domain.com");emails.add("user_name@domain.com");emails.add("username@yahoo.corporate.in");//Invalid emailsemails.add(".username@yahoo.com");emails.add("username@yahoo.com.");emails.add("username@yahoo..com");emails.add("username@yahoo.c");emails.add("username@yahoo.corporate");String regex = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";Pattern pattern = Pattern.compile(regex);for(String email : emails){Matcher matcher = pattern.matcher(email);System.out.println(email +" : "+ matcher.matches());}

Вывод программы.

user@domain.com : trueuser@domain.co.in : trueuser.name@domain.com : trueuser_name@domain.com : trueusername@yahoo.corporate.in : true.username@yahoo.com : falseusername@yahoo.com. : falseusername@yahoo..com : falseusername@yahoo.c : falseusername@yahoo.corporate : false

Это последнее регулярное выражение — моя рекомендация для простой проверки электронной почты в Java. Обратите внимание, что проверка электронной почты в Java без регулярного выражения возможна, но не рекомендуется. Везде, где вам нужно иметь дело с шаблонами, регулярные выражения — ваши друзья.

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

Прокрутить вверх