我尝试使用preg_match验证电子邮件地址时遇到了一些问题(如果更合适,则使用eregi())。我现在尝试了几种正则表达式模式,无论我做什么它似乎都不起作用。
这是功能:
function validateEmail($email) {
if(eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)){
return true;
}
}
任何想法有什么不对?我已经尝试在eregi(以及之前使用过的preg_match)之前加上一个感叹号,并且反过来(正如预期的那样),但仍然没有使它按预期工作。如果它没有通过正则表达式,我希望它返回TRUE。
我在preg_match函数上没有使用相同的正则表达式,然后我发现了另一个,因为我知道你不能真正混合这两个。正确?
提前致谢!
答案 0 :(得分:8)
您应该通过filter_var
使用过滤器扩展程序:
filter_var($email, FILTER_VALIDATE_EMAIL);
如果您需要正则表达式,请不要使用严格的规则,否则我的+@example.org
域名将被拒绝。使用类似~[^@]+@(?:[^.]+\.)+[A-Za-z]{2,6}~
的内容。虽然这仍然不允许有效的电子邮件,例如"\@"@example.org
。
PS:如果你想知道为什么你的正则表达式不起作用:
[]
内不写||
。只需使用[a-z0-9]
即可。 ||
只会另外允许|
字符+
量词。知道每个部分可能只有一个角色。修复所有这些问题(但请不要使用此正则表达式!):
preg_match('~[a-z0-9]+@[a-z0-9]+.[a-z]+~i', $email);
答案 1 :(得分:2)
为了澄清一些内容,ereg
已弃用。
要将其转换为preg_match
,它将是:
if(preg_match('/[a-z||0-9]@[a-z||0-9].[a-z]/', $email)){
大多数(我松散地使用这个术语)ereg
只需要添加分隔符(第一个和最后一个)以转换为preg_match
。