Как проверить адрес электронной почты с помощью регулярного выражения
![]()
Шаблон регулярного выражения электронной почты
^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*
@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
Описание
^ #start of the line
[_A-Za-z0-9-\\+]+ # must start with string in the bracket [ ], must contains one or more (+)
( # start of group #1
\\.[_A-Za-z0-9-]+ # follow by a dot "." and string in the bracket [ ], must contains one or more (+)
)* # end of group #1, this group is optional (*)
@ # must contains a "@" symbol
[A-Za-z0-9-]+ # follow by string in the bracket [ ], must contains one or more (+)
( # start of group #2 - first level TLD checking
\\.[A-Za-z0-9]+ # follow by a dot "." and string in the bracket [ ], must contains one or more (+)
)* # end of group #2, this group is optional (*)
( # start of group #3 - second level TLD checking
\\.[A-Za-z]{2,} # follow by a dot "." and string in the bracket [ ], with minimum length of 2
) # end of group #3
$ #end of the line
Комбинация означает, что адрес электронной почты должен начинаться с «_A-Za-z0-9 - \ +», необязательно, за ним следует «. [_ A-Za-z0-9-]» и заканчиваться символом «@». Доменное имя электронного письма должно начинаться с «A-Za-z0-9-», за ним следует Tld первого уровня (.com, .net) «. [A-Za-z0-9]» и, необязательно, за ним следует Tld второго уровня. (.com.au, .com.my) «\. [A-Za-z] \ {2,}», где Tld второго уровня должен начинаться с точки «.» и длина должна быть не менее 2 символов.
1. Пример регулярного выражения Java
Вот пример Java, показывающий, как использовать регулярное выражение для проверки адреса электронной почты.
EmailValidator.java
package com.example.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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();
}
}
2. Действительные электронные письма
3. Неверные электронные письма
1. пример - должен содержать символ «@»
2. пример @ .com.my - tld не может начинаться с точки «.»
3. [email protected] - «.a» не является допустимым tld, последний tld должен содержать не менее двух символов
4. example123 @ .com - tld не может начинаться с точки «.»
5. example123 @ .com.com - tld не может начинаться с точки «.»
6. .[email protected] - первый символ электронного письма не может начинаться с точки «.»
7. example ()@gmail.com – email’s is only allow character, digit,
underscore and dash
8. example@%.com - tld электронной почты может содержать только символы и цифры
9. [email protected] – double dots “.” are not allow
10. [email protected] – email’s last character can not end with dot “.”
11. example@[email protected] – double “@” is not allow
12. [email protected].1a -email’s tld which has two characters can not contains digit
4. Модульный тест
Вот модульный тест с использованиемtestNG.
EmailValidatorTest.java
package com.example.regex;
import org.testng.Assert;
import org.testng.annotations.*;
/**
* Email validator Testing
*
* @author example
*
*/
public class EmailValidatorTest {
private EmailValidator emailValidator;
@BeforeClass
public void initData() {
emailValidator = new EmailValidator();
}
@DataProvider
public Object[][] ValidEmailProvider() {
return new Object[][] { { new String[] { "[email protected]",
"[email protected]", "[email protected]",
"[email protected]", "[email protected]",
"[email protected]", "[email protected]",
"[email protected]", "[email protected]",
"[email protected]" } } };
}
@DataProvider
public Object[][] InvalidEmailProvider() {
return new Object[][] { { new String[] { "example", "[email protected]",
"[email protected]", "[email protected]", "[email protected]",
"[email protected]", "example()*@gmail.com", "example@%*.com",
"[email protected]", "[email protected]",
"example@[email protected]", "[email protected]" } } };
}
@Test(dataProvider = "ValidEmailProvider")
public void ValidEmailTest(String[] Email) {
for (String temp : Email) {
boolean valid = emailValidator.validate(temp);
System.out.println("Email is valid : " + temp + " , " + valid);
Assert.assertEquals(valid, true);
}
}
@Test(dataProvider = "InvalidEmailProvider", dependsOnMethods = "ValidEmailTest")
public void InValidEmailTest(String[] Email) {
for (String temp : Email) {
boolean valid = emailValidator.validate(temp);
System.out.println("Email is valid : " + temp + " , " + valid);
Assert.assertEquals(valid, false);
}
}
}
Вот результат модульного теста.
Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : example , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : example()*@gmail.com , false Email is valid : example@%*.com , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : example@[email protected] , false Email is valid : [email protected] , false PASSED: ValidEmailTest([Ljava.lang.String;@15f48262) PASSED: InValidEmailTest([Ljava.lang.String;@789934d4) =============================================== Default test Tests run: 2, Failures: 0, Skips: 0 ===============================================