电子邮件域的正则表达式(非基本电子邮件验证)

时间:2011-03-20 15:39:57

标签: php regex

我正在使用

if(preg_match('~@(semo\.edu|uni\.uu\.se|)$~', $email)) 

作为域名检查。

但是,我只需要检查电子邮件是否以上述域名结尾。例如,所有这些都需要被接受:

hello@semo.edu
hello@student.semo.edu
hello@cool.teachers.semo.edu

所以我猜我在@之后需要一些东西但是之前(这就像“任意随机字符串或空字符串”。任何可以帮助我的regexp-ninjas?

3 个答案:

答案 0 :(得分:2)

如果您已经知道自己正在处理valid email address,则

([^@]*\.)?有效。说明:它是空的,或者以句点结尾但不包含&符号的任何内容。因此student.cs.semo.edu与普通semo.edu匹配,但与me@notreallysemo.edu匹配。所以:

~@([^@]*\.)?(semo\.edu|uni\.uu\.se)$~

请注意,我已从原始正则表达式中删除了最后一个|

答案 1 :(得分:0)

您可以使用[a-zA-Z0-9\.]*来匹配任何或多个字符(字母,数字或点):

~@[a-zA-Z0-9\.]*(semo\.edu|uni\.uu\.se|)$~

答案 2 :(得分:0)

.*会匹配任何内容。但你实际上并不想这样。域名中有许多字符无效(例如空格)。相反,你想要更像这样的东西:

[\w.]*

我可能没有所有允许的角色,但这会让你[A-Za-z0-9_。]。我们的想法是,您在方形行李箱中列出所有允许的字符,然后使用*来表示其中没有一个或多个。