根据 RFC5322 及以下验证电子邮件ID
https://zh.wikipedia.org/wiki/电子邮件地址
下面是使用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
域
-
john.smith@(comment)example.com
john.smith@example.com(comment)
您可以像这样使用 _ RFC5322_ (参考正则表达式已修改)
"(?im)^(?=.{1,64}@)(?:(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"@)|((?:[0-9a-z](?:\\.(?!\\.)|[-!#\\$%&'\\*\\+/=\\?\\^`\\{\\}\\|~\\w])*)?[0-9a-z]@))(?=.{1,255}$)(?:(\\[(?:\\d{1,3}\\.){3}\\d{1,3}\\])|((?:(?=.{1,63}\\.)[0-9a-z][-\\w]*[0-9a-z]*\\.)+[a-z0-9][\\-a-z0-9]{0,22}[a-z0-9])|((?=.{1,63}$)[0-9a-z][-\\w]*))$"
https://regex101.com/r/ObS3QZ/1
# (?im)^(?=.{1,64}@)(?:("[^"\\]*(?:\\.[^"\\]*)*"@)|((?:[0-9a-z](?:\.(?!\.)|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)?[0-9a-z]@))(?=.{1,255}$)(?:(\[(?:\d{1,3}\.){3}\d{1,3}\])|((?:(?=.{1,63}\.)[0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9])|((?=.{1,63}$)[0-9a-z][-\w]*))$ # Note - remove all comments '(comments)' before runninig this regex # Find \([^)]*\) replace with nothing (?im) # Case insensitive ^ # BOS # Local part (?= .{1,64} @ ) # 64 max chars (?: ( # (1 start), Quoted " [^"\\]* (?: \\ . [^"\\]* )* " @ ) # (1 end) | # or, ( # (2 start), Non-quoted (?: [0-9a-z] (?: \. (?! \. ) | # or, [-!#\$%&'\*\+/=\?\^`\{\}\|~\w] )* )? [0-9a-z] @ ) # (2 end) ) # Domain part (?= .{1,255} $ ) # 255 max chars (?: ( # (3 start), IP \[ (?: \d{1,3} \. ){3} \d{1,3} \] ) # (3 end) | # or, ( # (4 start), Others (?: # Labels (63 max chars each) (?= .{1,63} \. ) [0-9a-z] [-\w]* [0-9a-z]* \. )+ [a-z0-9] [\-a-z0-9]{0,22} [a-z0-9] ) # (4 end) | # or, ( # (5 start), Localdomain (?= .{1,63} $ ) [0-9a-z] [-\w]* ) # (5 end) ) $ # EOS
How make sudhansu_@gmail.com this as valid email ID – Mihir Feb 7 at 9:34
我认为规范希望将局部部分用引号引起来, 或将其用引起来 [0-9a-z]。
[0-9a-z]
但是,要避开以后并使之sudhansu_@gmail.com生效,只需 将第2组替换为:
sudhansu_@gmail.com
( # (2 start), Non-quoted [0-9a-z] (?: \. (?! \. ) | # or, [-!#\$%&'\*\+/=\?\^`\{\}\|~\w] )* @ ) # (2 end)
新正则表达式
"(?im)^(?=.{1,64}@)(?:(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"@)|([0-9a-z](?:\\.(?!\\.)|[-!#\\$%&'\\*\\+/=\\?\\^`\\{\\}\\|~\\w])*@))(?=.{1,255}$)(?:(\\[(?:\\d{1,3}\\.){3}\\d{1,3}\\])|((?:(?=.{1,63}\\.)[0-9a-z][-\\w]*[0-9a-z]*\\.)+[a-z0-9][\\-a-z0-9]{0,22}[a-z0-9])|((?=.{1,63}$)[0-9a-z][-\\w]*))$"
新演示
https://regex101.com/r/ObS3QZ/5