正则表达式在@之前接受一个或多个字符

时间:2014-02-12 13:32:43

标签: c# regex email-address

我有以下电子邮件REGEX验证。

([a-zA-Z0-9_\-\.]+)([a-zA-Z0-9])@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})

当我测试时,它不允许在@ .e.g t@stackoverflow.com之前使用单个字符的电子邮件,但在@之前它允许2个字符。例如th@stackoverflow.com 那么有人可以告诉我哪里出错了吗? 提前致谢

3 个答案:

答案 0 :(得分:2)

第二组应该有允许0个字符的量化器。这似乎是resolve问题:

...([a-zA-Z0-9]*)@...

更新。正如@Nyx在评论中指出的那样,上面的内容将匹配address.@themail.com。如果要避免这种情况,您可以将zero or more量化器应用于第一组,将one or more应用于第二组:

([a-zA-Z0-9_\-\.]*)([a-zA-Z0-9]+)@...

答案 1 :(得分:0)

使用此正则表达式:

[a-zA-Z0-9_\-\.].*@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})

但验证正则表达式是一个坏主意。

为什么?

查看文章:http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx

答案 2 :(得分:0)

由于 +

,第一部分需要1个或多个字符
([a-zA-Z0-9_\-\.]+)

第二个1个字符:

([a-zA-Z0-9])

所以最终产生2个或更多字符。