在这段代码中,我无法匹配validate()函数中的正则表达式帮助我弄错了地方
我在用户输入中输入了除(john1246@##$##@+-
这样的字母以外的数据
它在validate()函数中返回输入值(john1246@##$##@+-
)或$ data,但未显示应返回PRG_MTH_ERR
的错误。我的代码有什么问题?
validate.php
function validate($data, $reg_exp = "") {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if (empty($data) == true) {
return "EMT_FLD";
} elseif ($data != preg_match($reg_exp,$data)) {
return "PRG_MTH_ERR";
} else {
return $data;
}
}
login.php
if (isset($_POST['login'])) {
include "./database/db.php";
$db = new db();
include 'validate.php';
echo validate($_POST['user'],"/^['a-zA-z']$/");
}
我希望它返回PRG_MTH_ERR
,但它返回$data
答案 0 :(得分:2)
如果模式与给定的主题匹配,则preg_match()返回1,如果不匹配则返回0,如果发生错误则返回FALSE。
在您的代码中
$data
永远不会被
返回preg_match($reg_exp,$data)
答案 1 :(得分:2)
松散的比较是您的问题:
elseif ($data != preg_match($reg_exp,$data)) {
因为"john1246@##$##@+-" == 0
为真。
您可以将1与preg_match的结果进行比较(请参阅the doc,以了解有关preg_match的更多信息)
答案 2 :(得分:2)
更改
$data != preg_match($reg_exp,$data)
到
1 != preg_match($reg_exp,$data)
和正则表达式到/^[a-zA-Z]*$/
答案 3 :(得分:2)
preg_match()函数在字符串中搜索模式,如果存在模式,则返回true,否则返回false。
所以只需使用 } elseif(preg_match($ reg_exp,$ data)){ 代替 } elseif($ data!= preg_match($ reg_exp,$ data)){
希望这会有所帮助。