【发布时间】:2017-06-09 11:26:17
【问题描述】:
我想检查一个字符串是否只包含这些字符:
A-Z
a-z
0-9
-
@
_
.
目的是检查邮件在表单中是否有效。
我正在这样做:
if(preg_match('/[a-z0-9\._\-\@]/i', $email) === 0) {
echo 'not valid';
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo 'not valid';
}
但是如果有像
这样的特殊字符,它不会返回错误test%@test.fr
【问题讨论】:
-
为什么要使用正则表达式除了
FILTER_VALIDATE_EMAIL...?您正在创建另一个 arbitrary subset of email addresses you're allowing people to use! -
/[a-z0-9\._\-\@]/i如果一个字符匹配成功。 -
filter_var()带有一个电子邮件标志,无论是清理还是验证,这是您唯一需要的 -
请注意,Gmail 用户可以在他们的电子邮件中使用
+来过滤收到的邮件。您的正则表达式没有考虑到这一点。 -
您的电子邮件地址示例是有效的,因此
filter_var不会将其视为无效。对于preg_match,请查看:eval.in/814651
标签: php regex validation