我正在检查表单中的登录名和密码。它不应该包含任何特殊的字符。
评论return var_dump
正确显示了登录名和密码值。
遗憾的是,if
和else
都没有返回。
为什么会这样?
$usernCheck = $_POST['usern'];
$passCheck = $_POST['passn'];
// return var_dump($usernCheck.$passCheck);
if( (preg_match("!@#$%^&*()_+-=,./<>?;':\"{}[]", $usernCheck) !== false)
OR (preg_match("!@#$%^&*()_+-=,./<>?;':\"{}[]", $passCheck) !== false) ){
return "Found special chars.";
} else {
return "Not found special chars.";
}
答案 0 :(得分:1)
preg_match
仅返回false
。如果模式不匹配,它将返回0
,因此使用!== false
可能不是一个好的比较,因为0 == false
(相等),0 !== false
(身份)。
如果没有完全检查你的正则表达式,我建议只让preg_match
的返回值计算为布尔值。如果找到匹配项,它将返回1
,这将评估为真。
if( preg_match($pattern, $usernCheck) || preg_match($pattern, $passCheck) {
return "Found special chars.";
} else {
return "Not found special chars.";
}
稍微检查一下你的正则表达式后,看起来很多字符在regex中有意义,需要进行转义,字符集应该包含在[]
中以匹配 any 列表中的字符,而不是所有。类似的东西:
'[!@#\$%\^\&\*\(\)_\+-=,\.\/<>\?;\':\"{}\[\]]'
但可能还有其他特殊字符。最好指定允许哪些字符 ,而不是将特定字符列入黑名单。