我正在尝试使用preg_match和filter_var来检查表单条目。我创建了两个函数,当字段包含无效字符时,它们应该返回false。对于用户名,无效字符将是数字和符号。我的职能出了什么问题?
用户名功能:
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.
答案 0 :(得分:0)
在verifyEmailAdd函数中,您有:
if (!filter_var($emailadd...
但是在函数声明中你有$ x,所以$ emailadd在这个范围内是未定义的。
您会注意到,如果您启用了error_reporting,请参阅https://stackoverflow.com/a/5438125/4568686
第二件事 - 在verifyUsername函数中,我不确定你的正则表达式是什么意思,如果你只想接受字母字符,[^ a-z]就足够了。
嗯,在这里你可以进行修改:
<?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("45wqadf@&%"));
var_dump(verifyEmailAdd("wqadf@blah.com"));
您可以在此处进行测试:https://3v4l.org/kVDiK