PHP中的表单验证validate()函数中的错误

时间:2019-05-16 07:16:58

标签: php

在这段代码中,我无法匹配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

4 个答案:

答案 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)){

希望这会有所帮助。