根据RFC5322和以下验证电子邮件IDS
https://en.wikipedia.org/wiki/Email_address
下面是使用java和正则表达式来验证电子邮件ID的样本代码。
public void checkValid() {
List<String> emails = new ArrayList();
//Valid Email Ids
emails.add("simple@example.com");
emails.add("very.common@example.com");
emails.add("disposable.style.email.with+symbol@example.com");
emails.add("other.email-with-hyphen@example.com");
emails.add("fully-qualified-domain@example.com");
emails.add("user.name+tag+sorting@example.com");
emails.add("fully-qualified-domain@example.com");
emails.add("x@example.com");
emails.add("carlosd'intino@arnet.com.ar");
emails.add("example-indeed@strange-example.com");
emails.add("admin@mailserver1");
emails.add("example@s.example");
emails.add("\" \"@example.org");
emails.add("\"john..doe\"@example.org");
//Invalid emails Ids
emails.add("Abc.example.com");
emails.add("A@b@c@example.com");
emails.add("a\"b(c)d,e:f;g<h>i[j\\k]l@example.com");
emails.add("just\"not\"right@example.com");
emails.add("this is\"not\\allowed@example.com");
emails.add("this\\ still\"not\\allowed@example.com");
emails.add("1234567890123456789012345678901234567890123456789012345678901234+x@example.com");
emails.add("john..doe@example.com");
emails.add("john.doe@example..com");
String regex = "^[a-zA-Z0-9_!#$%&'*+/=? \\\"`{|}~^.-]+@[a-zA-Z0-9.-]+$";
Pattern pattern = Pattern.compile(regex);
int i=0;
for(String email : emails){
Matcher matcher = pattern.matcher(email);
System.out.println(++i +"."+email +" : "+ matcher.matches());
}
}
实际输出:
1.simple@example.com : true
2.very.common@example.com : true
3.disposable.style.email.with+symbol@example.com : true
4.other.email-with-hyphen@example.com : true
5.fully-qualified-domain@example.com : true
6.user.name+tag+sorting@example.com : true
7.fully-qualified-domain@example.com : true
8.x@example.com : true
9.carlosd'intino@arnet.com.ar : true
10.example-indeed@strange-example.com : true
11.admin@mailserver1 : true
12.example@s.example : true
13." "@example.org : true
14."john..doe"@example.org : true
15.Abc.example.com : false
16.A@b@c@example.com : false
17.a"b(c)d,e:f;g<h>i[j\k]l@example.com : false
18.just"not"right@example.com : true
19.this is"not\allowed@example.com : false
20.this\ still"not\allowed@example.com : false
21.1234567890123456789012345678901234567890123456789012345678901234+x@example.com : true
22.john..doe@example.com : true
23.john.doe@example..com : true
预计输出继电器:
1.simple@example.com : true
2.very.common@example.com : true
3.disposable.style.email.with+symbol@example.com : true
4.other.email-with-hyphen@example.com : true
5.fully-qualified-domain@example.com : true
6.user.name+tag+sorting@example.com : true
7.fully-qualified-domain@example.com : true
8.x@example.com : true
9.carlosd'intino@arnet.com.ar : true
10.example-indeed@strange-example.com : true
11.admin@mailserver1 : true
12.example@s.example : true
13." "@example.org : true
14."john..doe"@example.org : true
15.Abc.example.com : false
16.A@b@c@example.com : false
17.a"b(c)d,e:f;g<h>i[j\k]l@example.com : false
18.just"not"right@example.com : false
19.this is"not\allowed@example.com : false
20.this\ still"not\allowed@example.com : false
21.1234567890123456789012345678901234567890123456789012345678901234+x@example.com : false
22.john..doe@example.com : false
23.john.doe@example..com : false
我怎样才能改变我的正则表达式,使其无效的电子邮件ID的下方图案。
1234567890123456789012345678901234567890123456789012345678901234+x@example.com
john..doe@example.com
john.doe@example..com
just"not"right@example.com
下面是正则表达式的标准:
本地部分
电子邮件地址的本地部分可以使用这些ASCII字符的:
- 大写和小写拉丁字母
A to Z
和a to z
; - 数字
0 to 9
; - 特殊字符#$%&'* + - / = ^ _`!?{|}〜
- 点
.
,只要它不是第一个或最后一个字符,除非报价,并且还提供它不连续出现,除非引用(例如John..Doe@example.com
是不允许的,但"John..Doe"@example.com
是允许); -
space
和"(),:;<>@[\]
字符与限制允许的(它们只允许一个引用字符串内,如在下面的段落中描述的,并且另外,反斜线或双引号必须在前面加反斜杠);注释被允许与本地部分的任一端括号;例如john.smith(comment)@example.com
和(comment)john.smith@example.com
都相当于john.smith@example.com
。
域
- 大写和小写拉丁字母
A to Z
和a to z
; - 数字
0 to 9
,条件是顶级域名是不是所有的数字; - 连字符
-
只要它不是第一个或最后一个字符。 允许注释域中,以及在当地的部分; 例如,john.smith@(comment)example.com
和john.smith@example.com(comment)
相当于john.smith@example.com
。