0

我有以下电子邮件正则表达式验证。

([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})

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

4

3 回答 3

2

第二组应该有允许 0 个字符的量词。这似乎解决了这个问题:

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

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

([a-zA-Z0-9_\-\.]*)([a-zA-Z0-9]+)@...
于 2014-02-12T13:37:54.647 回答
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

于 2014-02-12T13:36:45.360 回答
0

由于+ ,第一部分需要 1 个或多个字符:

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

第二个 1 字符:

([a-zA-Z0-9])

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

于 2014-02-12T13:56:20.717 回答