电子邮件正则表达式模式
^[_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示例,向您展示如何使用正则表达式来验证电子邮件地址。
package com.mkyong.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.有效的电子邮件
1. mkyong @ yahoo.com,mkyong-100 @ yahoo.com,mkyong.100 @ yahoo.com
2. mkyong111@mkyong.com,mkyong-100@mkyong.net,mkyong.100@mkyong.com.au
3. mkyong@1.com,mkyong@gmail.com.com
4. mkyong + 100 @ gmail.com,mkyong-100 @ yahoo-test.com
3.无效的电子邮件
1. mkyong –必须包含“ @”符号
2. mkyong @ .com.my – tld不能以点“。”开头
3. mkyong123@gmail.a –“ .a”不是有效的tld,最后一个tld必须包含至少两个字符
4. mkyong123 @ .com – tld不能以点“。”开头
5. mkyong123 @ .com.com – tld不能以点“。”开头
6. .mkyong @ mkyong.com –电子邮件的首字符不能以点“。”开头
7. mkyong()* @ gmail.com –电子邮件仅允许使用字符,数字,下划线和破折号
8. mkyong@%*.com –电子邮件的tld仅允许使用字符和数字
9. mkyong..2002 @ gmail.com-双点“。” 不允许
10. mkyong。@ gmail.com –电子邮件的最后一个字符不能以点“。”结尾
11. mkyong @ mkyong @ gmail.com –不允许使用双“ @”
12. mkyong@gmail.com.1a-具有两个字符的电子邮件的tld不能包含数字
4.单元测试
这是使用testNG的单元测试。
package com.mkyong.regex;
import org.testng.Assert;
import org.testng.annotations.*;
/**
* Email validator Testing
*
* @author mkyong
*
*/
public class EmailValidatorTest {
private EmailValidator emailValidator;
@BeforeClass
public void initData() {
emailValidator = new EmailValidator();
}
@DataProvider
public Object[][] ValidEmailProvider() {
return new Object[][] { { new String[] { "mkyong@yahoo.com",
"mkyong-100@yahoo.com", "mkyong.100@yahoo.com",
"mkyong111@mkyong.com", "mkyong-100@mkyong.net",
"mkyong.100@mkyong.com.au", "mkyong@1.com",
"mkyong@gmail.com.com", "mkyong+100@gmail.com",
"mkyong-100@yahoo-test.com" } } };
}
@DataProvider
public Object[][] InvalidEmailProvider() {
return new Object[][] { { new String[] { "mkyong", "mkyong@.com.my",
"mkyong123@gmail.a", "mkyong123@.com", "mkyong123@.com.com",
".mkyong@mkyong.com", "mkyong()*@gmail.com", "mkyong@%*.com",
"mkyong..2002@gmail.com", "mkyong.@gmail.com",
"mkyong@mkyong@gmail.com", "mkyong@gmail.com.1a" } } };
}
@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 : mkyong@yahoo.com , true
Email is valid : mkyong-100@yahoo.com , true
Email is valid : mkyong.100@yahoo.com , true
Email is valid : mkyong111@mkyong.com , true
Email is valid : mkyong-100@mkyong.net , true
Email is valid : mkyong.100@mkyong.com.au , true
Email is valid : mkyong@1.com , true
Email is valid : mkyong@gmail.com.com , true
Email is valid : mkyong+100@gmail.com , true
Email is valid : mkyong-100@yahoo-test.com , true
Email is valid : mkyong , false
Email is valid : mkyong@.com.my , false
Email is valid : mkyong123@gmail.a , false
Email is valid : mkyong123@.com , false
Email is valid : mkyong123@.com.com , false
Email is valid : .mkyong@mkyong.com , false
Email is valid : mkyong()*@gmail.com , false
Email is valid : mkyong@%*.com , false
Email is valid : mkyong..2002@gmail.com , false
Email is valid : mkyong.@gmail.com , false
Email is valid : mkyong@mkyong@gmail.com , false
Email is valid : mkyong@gmail.com.1a , false
PASSED: ValidEmailTest([Ljava.lang.String;@15f48262)
PASSED: InValidEmailTest([Ljava.lang.String;@789934d4)
===============================================
Default test
Tests run: 2, Failures: 0, Skips: 0
===============================================
参考文献
翻译自: https://mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/