正则表达式问题电子邮件测试
我有一些模式波纹管的问题:
/([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