PHP preg_match()需要至少2个参数,1给定Error

时间:2014-07-14 21:20:34

标签: php

这个错误让我很困惑。 -

警告:preg_match()需要至少2个参数,第98行/home/s1lentec/public_html/restricted/registration-process.php中给出的参数为1

以下是代码 -

if (isset($_POST["zipCode"]) && $_POST["zipCode"] != "") {
    if (!preg_match("/^[0-9\-]$/")) {
        if (strlen($_POST["zipCode"] != 5) || strlen($_POST["zipCode"] != 9) || strlen($_POST["zipCode"] != 10)) {
            $_SESSION["error"][] = "ZIP code is not valid.  Valid format is xxxxx or xxxxx-xxxx";
        }
    }
}

奇怪的是,下一段代码几乎完全相同,并且不会引发任何错误 -

if (isset($_POST["phoneNumber"]) && $_POST["phoneNumber"] != "") {
    if (!preg_match("/^[0-9\-]$/")) {
        if (strlen($_POST["phoneNumber"] != 7) || strlen($_POST["phoneNumber"] != 8) || strlen($_POST["phoneNumber"] != 10) || strlen($_POST["phoneNumber"] != 12)) {
            $_SESSION["error"][] = "Phone number is not valid.  Valid format is xxx-xxxx or xxx-xxx-xxxx";
        }
    }
}

我甚至将后者复制/粘贴到前者的位置,它仍然会抛出相同的错误。甚至他们的数据库属性也是一样的。任何帮助将不胜感激,我已经修复了其他错误,并尝试减少/隔离此错误,但我只是无法搞清楚。 :/

2 个答案:

答案 0 :(得分:0)

Preg_match需要两个参数,即您正在检查的变量和正则表达式。所以在这种情况下应该是这样的: if(!preg_match(" / ^ [0-9 - ] $ /",$ _POST ['邮政编码n#39;]))

答案 1 :(得分:0)

该功能与其他人一样说需要2个参数,而你只传递了一个参数。

但是由于其中一个块显示错误而另一个块没有显示错误,是因为PHP只会在运行的代码中抛出错误。如果你的if语句中的代码从未发生过,那么if语句中的代码即使错误也不会引发错误。

在上面的情况中,您可能没有发送/设置phoneNumber变量,因此preg_match函数永远不会运行。

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

此外,要稍微清理代码,而不是同时运行isset()并检查变量是否为空,您可以使用函数empty()

if(isset($_POST["phoneNumber"]) && $_POST["phoneNumber"] != "") { }

变成

if(!empty($_POST['phoneNumber'])) { }

可以在PHP.net

找到preg_match的PHP参考