正则表达式问题电子邮件测试

我有一些模式波纹管的问题:

/([A-Z0-9]+[A-Z0-9._+-]*){3,64}@(([A-Z0-9]+([-][A-Z0-9])*){2,}.)+([A-Z0-9]+([-][A-Z0-9])*){2,}/i

它匹配电子邮件地址,我有这个规则的问题:

[A-Z0-9._+-]*

如果我删除它的作品,但我希望这个字符是0或更多。 我在http://regexpal.com/上测试了它,它可以工作,但在preg_match_all(PHP)上没有任何效果

谢谢


首先,这有很多资源可用。 快速搜索“电子邮件验证正则表达式”会产生大量的结果...包括这一个...

其次,问题不在*字符中。 问题出在整个街区。

([A-Z0-9]+[A-Z0-9._+-]*){3,64}

看看这是做什么。 它基本上是说尽可能匹配尽可能多的字母数字,然后尽可能多地与其他字符匹配,然后重复至少3次,最多64次。 这可能是很多人物...

相反,你可以这样做:

([A-Z0-9][A-Z0-9._+-]{2,63})

这最多会导致与64个字符的电子邮件匹配。

哦,这是使用正则表达式解析电子邮件的痛苦

还有很多其他资源用于验证电子邮件地址(包括filter_var )。 做一些搜索,看看流行的框架是如何做到的......


为什么不使用PHP filter_var()

filter_var('test@email.com', FILTER_VALIDATE_EMAIL)

没有好的正则表达式来验证电子邮件地址。 如果你绝对必须使用正则表达式,那么可以看看用PHP验证电子邮件地址,正确的方法。 尽管如此,这也绝不是一个完美的措施。

编辑:经过一番挖掘,我遇到了Mailparse。

Mailparse是解析和处理电子邮件的扩展。 它可以处理»RFC 822和»RFC 2045(MIME)兼容消息。

Mailparse是基于流的,这意味着它不会保存它处理的文件的内存中副本 - 所以在处理大量消息时它非常节约资源。


试试这个正则表达式:

/^[A-Z0-9][A-Z0-9._+-]{3,64}@([A-Z0-9][-A-Z0-9]*.)+[A-Z0-9]{2,}$/i

但是就像@Russell Dias说的那样,你不应该使用正则表达式来处理邮件。

链接地址: http://www.djcxy.com/p/92731.html

上一篇: Regex problem Email test

下一篇: Validate email address form submit