如何使正则表达式在角落案例电子邮件地址上工作
可能重复:
电子邮件验证 - 正则表达式
验证电子邮件地址的最佳正则表达式是什么?
大家好,
我有一个大致像这样的电子邮件地址,
firstname.lastname@4domain.co.nz
这不适用于我在这里用于电子邮件地址的正则表达式。 它似乎并不喜欢域名开头的4。
private const string MatchEmailPattern =
@"^(([w-]+.)+[w-]+|([a-zA-Z]{1}|[w-]{2,}))@" +
@"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9]).([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])." +
@"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9]).([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|" +
@"([a-zA-Z]+[w-]+.)+[a-zA-Z]{2,4})$";
大多数其他角落案件与这个正则表达式很好,下面的所有被拒绝,
Assert.IsFalse(EmailValidator.IsValidEmailAddress("..@test.com"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress(".a@test.com"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress(".@s.dd"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress("ab@988.120.150.10"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress("ab@120.256.256.120"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress("2@bde.cc"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress("-@bde.cc"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress("..@bde.cc"));
Assert.IsFalse(EmailValidator.IsValidEmailAddress("_@bde.cc"));
任何其他正则表达式的人可以建议的电子邮件,将与上述工作?
另外上面的正则表达式的优点是它可以处理像这样的地址,而且它们中的很多不这样做,
firstname.lastname_@gmail.com
您应该使用MailAddress
类,如下所示:
try {
address = new MailAddress(address).Address;
} catch(FormatException) {
//address is invalid
}
说实话? 我可能不会这么说,但为什么不能匹配
.+@.+
极简主义但90%的情况下功能。
一个有趣的事实是(与大多数语言不同),可以在C#/ .NET中编写一个完全符合RFC5322规范的电子邮件地址的“正则表达式”。 这是我之前准备的一个(链接显示了建筑):
^(?'localPart'((((((((?'paren'()|(?'-paren'))|([u0021-u0027u002a
-u005bu005d-u007e]|[u0001-u0008u000bu000cu000e-u001fu007f])|
([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|([u0021-u007e]|[ t]|[rn
]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(?(paren)(?!))))
)|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_`
{|}~-]+)|("(([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?(([u0021u0023-u
005bu005d-u007e]|[u0001-u0008u000bu000cu000e-u001fu007f])|(
[u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001f
u007f])))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?"))((((((?'paren'
()|(?'-paren'))|([u0021-u0027u002a-u005bu005d-u007e]|[u0001-u
0008u000bu000cu000e-u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[
t]+)+)|([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu
000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)
[ t]+)+))*?)(.(((((((?'paren'()|(?'-paren'))|([u0021-u0027u002
a-u005bu005d-u007e]|[u0001-u0008u000bu000cu000e-u001fu007f])
|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|([u0021-u007e]|[ t]|[r
n ]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(?(paren)(?!)))
))|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_
`{|}~-]+)|("(([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?(([u0021u0023-
u005bu005d-u007e]|[u0001-u0008u000bu000cu000e-u001fu007f])|
([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001
fu007f])))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?"))((((((?'paren'
()|(?'-paren'))|([u0021-u0027u002a-u005bu005d-u007e]|[u0001-
u0008u000bu000cu000e-u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[
t]+)+)|([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000cu
000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)
[ t]+)+))*?))*))@(?'domain'((((((((?'paren'()|(?'-paren'))|([u002
1-u0027u002a-u005bu005d-u007e]|[u0001-u0008u000bu000cu000e-
u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|([u0021-u007
e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(?(
paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?(([a-zA-Z0-9
!#$%&'*+/=?^_`{|}~-]+)|("(([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?(([
u0021u0023-u005bu005d-u007e]|[u0001-u0008u000bu000cu000e-u00
1fu007f])|([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000
cu000e-u001fu007f])))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?"))((
((((?'paren'()|(?'-paren'))|([u0021-u0027u002a-u005bu005d-u00
7e]|[u0001-u0008u000bu000cu000e-u001fu007f])|([ t]+((rn)[ t
]+)?|((rn)[ t]+)+)|([u0021-u007e]|[ t]|[rn ]|[u0001-u0008
u000bu000cu000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[
t]+)?|((rn)[ t]+)+))*?)(.(((((((?'paren'()|(?'-paren'))|([u00
21-u0027u002a-u005bu005d-u007e]|[u0001-u0008u000bu000cu000e-
u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|([u0021-u00
7e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(?
(paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[t]+)+))*?(([a-zA-Z0-9
!#$%&'*+/=?^_`{|}~-]+)|("(([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?(([
u0021u0023-u005bu005d-u007e]|[u0001-u0008u000bu000cu000e-u00
1fu007f])|([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u000bu000
cu000e-u001fu007f])))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?"))((
((((?'paren'()|(?'-paren'))|([u0021-u0027u002a-u005bu005d-u00
7e]|[u0001-u0008u000bu000cu000e-u001fu007f])|([ t]+((rn)[ t
]+)?|((rn)[ t]+)+)|([u0021-u007e]|[ t]|[rn ]|[u0001-u0008
u000bu000cu000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[
t]+)?|((rn)[ t]+)+))*?))*)|(((((((?'paren'()|(?'-paren'))|([u0
021-u0027u002a-u005bu005d-u007e]|[u0001-u0008u000bu000cu000e
-u001fu007f])|([ t]+((rn)[ t]+)?|((rn)[ t]+)+)|([u0021-u0
07e]|[ t]|[rn ]|[u0001-u0008u000bu000cu000e-u001fu007f]))*(
?(paren)(?!)))))|([ t]+((rn)[ t]+)?|((rn)[ t]+)+))*?[(([ t]+
((rn)[ t]+)?|((rn)[ t]+)+)?([!-Z^-~]|[u0001-u0008u000bu000c
u000e-u001fu007f]))*([ t]+((rn)[ t]+)?|((rn)[ t]+)+)?](((((
(?'paren'()|(?'-paren'))|([u0021-u0027u002a-u005bu005d-u007e]|
[u0001-u0008u000bu000cu000e-u001fu007f])|([ t]+((rn)[ t]+)?
|((rn)[ t]+)+)|([u0021-u007e]|[ t]|[rn ]|[u0001-u0008u00
0bu000cu000e-u001fu007f]))*(?(paren)(?!)))))|([ t]+((rn)[ t]+
)?|((rn)[ t]+)+))*?))$
但是请注意,RFC5322的域名处理比实际的域名RFC更加宽松,并且还存在其他限制,这些限制适用于各种RFC(例如,SMTP强制实施最大长度)。 因此,RFC5322考虑电子邮件地址的事情仍然可以通过其他措施无效。
酸性测试仍然只是:用验证码发送电子邮件给它。
链接地址: http://www.djcxy.com/p/2701.html