如何使用preg_match和filter_var拒绝包含无效字符的条目?
问题描述:
我想使用preg_match和filter_var来检查表单条目。我创建了两个函数,当字段包含无效字符时应该返回false。对于用户名,无效字符将是数字和符号。我的功能有什么问题?如何使用preg_match和filter_var拒绝包含无效字符的条目?
用户名功能:
function verifyUsername($x){
if (!preg_match('/[^a-z\s-]/i',$x)) {
return 0;
}
else {
return 1;
}
}
电子邮件地址的功能:
function verifyEmailAdd($x){
if (!filter_var($emailadd, FILTER_VALIDATE_EMAIL)) {
return 0;
}
else {
return 1;
}
}
我呼吁他们想:
goodemail = verifyEmailAdd($emailAdd);
gooduser = verifyUsername($userName);
他们始终返回1
答
在verifyEmailAdd开玩笑你有:
if (!filter_var($emailadd...
但是在函数声明中你有$ x,所以$ emailadd在这个范围内是未定义的。
你会注意到它,如果你的error_reporting启用了 - 看到https://stackoverflow.com/a/5438125/4568686
第二件事 - 在verifyUsername功能,我不知道你所说的正则表达式的意思是什么,如果你想只接受字母字符, [^ az]应该足够了。
那么,在这里你去修改:
<?php
function verifyUsername($x){
if (preg_match('/[^a-z]/i',$x)) {
return 0;
}
else {
return 1;
}
}
function verifyEmailAdd($x){
if (!filter_var($x, FILTER_VALIDATE_EMAIL)) {
return 0;
}
else {
return 1;
}
}
var_dump(verifyUsername("45wqadf"));
var_dump(verifyUsername("wqadf"));
var_dump(verifyEmailAdd("[email protected]&%"));
var_dump(verifyEmailAdd("[email protected]"));
你可以在这里进行测试:https://3v4l.org/kVDiK