正则表达式:过滤电子邮件地址

时间:2011-12-21 18:38:28

标签: php regex

我有以下正则表达式

/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/

目前与表格-myemail-address@aasdf.com的电子邮件地址相匹配(不希望接受此电子邮件地址bc以连字符开头) 如果我希望它拒绝以 - (连字符)开头的电子邮件地址,并且只接受以下划线开头的电子邮件地址_我将如何修改正则表达式?

修改正则表达式之前的另一个问题 - 电子邮件甚至可以从连字符开始吗?如果他们可以,那么修改正则表达式就没有意义了。

感谢。

4 个答案:

答案 0 :(得分:2)

/^[_a-zA-Z0-9]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/

答案 1 :(得分:2)

要查明是否允许使用带有-个引号的电子邮件地址,您可以使用更符合标准的正则表达式进行检查:

print filter_var("-test@example.com", FILTER_VALIDATE_EMAIL);

答案 2 :(得分:2)

-hello-world@example.net是有效的电子邮件地址。

来自RFC3696 Section 3: Restrictions on email addresses

  

local-parts可以包含任何字母组合   字符,数字或任何特殊字符

  ! # $ % & ' * + - / = ?  ^ _ ` . { | } ~

值得注意的是,“[期间]可能不会用于开始或结束本地部分,也不会出现两个或更多连续期间。”

答案 3 :(得分:0)

修复你的正则表达式的第一部分:

/^[_a-zA-Z0-9]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/