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

时间:2010-08-25 13:07:58

标签: php regex email

我的模式有一些问题:

/([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)上有效 - 无法正常工作

由于

5 个答案:

答案 0 :(得分:5)

为什么不使用PHP filter_var()

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

没有好的正则表达式来验证电子邮件地址。如果你绝对必须使用正则表达式,那么可以看看Validate an E-Mail Address with PHP, the Right Way.虽然,这绝不是一个完美的衡量标准。

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

  

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

     

Mailparse是基于流的,这意味着   它不会保留内存中的副本   它处理的文件 - 所以它是   交易时非常有效率   大信息。

答案 1 :(得分:1)

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

其次,问题不在*字符中。问题在于整个区块。

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

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

相反,你可以这样做:

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

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

哦,this is the pain of parsing emails with regex

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

答案 2 :(得分:0)

试试这个正则表达式:

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

但是像@Russell Dias所说,你不应该使用正则表达式来发送电子邮件。

答案 3 :(得分:0)

整个组后你有数量修饰符:

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

所以这需要至少3个字母字符,如下所示:

  

A5 ________ @ gmail.com

不起作用,但是这个:

  

一个____一个___一个___ @ gmail.com

将完成这项工作。更好地找到一个经过良好测试的正则表达式。

此外,您没有开始和结束分隔符,因此类似的内容将通过:

&^$@#&$^@#&aaa5a55a55a@gmail.comADA;'DROP TABLE :)

答案 4 :(得分:0)

虽然我同意Russel Dias的观点,但我相信你的问题在于整个版块:

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

基本上你说,你想要的;

  • 字母或数字,1次或多次
  • 字母或数字,0次或更多次
  • 重复以上3到64次