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

PHP preg_match()至少需要2个参数,1个给定错误,php,Php,这个错误真让我困惑 警告:preg_match()至少需要2个参数,1个参数在第98行的/home/s1lentec/public_html/restricted/registration-process.php中给出 这是它的代码- if (isset($_POST["zipCode"]) && $_POST["zipCode"] != "") { if (!preg_match("/^[0-9\-]$/")) { if (strlen($_POST["

这个错误真让我困惑

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

这是它的代码-

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";
        }
    }
}

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

Preg_match需要两个参数,您正在检查的变量和正则表达式。所以在这种情况下,应该是这样的:
如果(!preg_match(“/^[0-9-]$/”,$\u POST['zipCode'])

该函数如其他人所说需要两个参数,而您只传递了一个

但是,其中一个块显示错误而另一个块不显示错误的原因是,PHP只在运行的代码中抛出错误。如果
If
语句中的代码从未发生过,则该
If
语句中的代码即使出错也不会抛出错误

在上述情况下,您可能没有发送/设置
phoneNumber
变量,因此
preg\u match
函数永远不会运行

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
另外,为了稍微清理一下代码,您可以使用函数
empty()
,而不必同时运行
isset()
,并检查变量是否为空

if(设置($\u POST[“phoneNumber”])和&$\u POST[“phoneNumber”]!=“”){}

变成

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


有关
preg_match
的PHP参考信息,请访问

阅读此消息
preg_match()
需要两个参数,但只传递一个。我不明白怎么会更清楚。看一下手册,我明白这一点,但为什么需要两个参数呢?特别是当下一个代码位几乎完全相同,但在输入几乎完全相同的代码时不会抛出错误时?显然,您不理解它,否则您就不会在这里。问问自己,PHP如何知道将正则表达式应用于什么。然后阅读我链接到的引用,它应该会变得很明显。是否正在执行第二个preg_匹配:它不会显示错误,除非$\u POST['phoneNumber']实际上包含一个值我的坏,我在发布后立即注意到它,但我在移动,所以编辑需要更长的时间。修正。谢谢用户3560463。这是非常明显的,我觉得我错过了它就像一个白痴,但事实上,电话号码代码没有抛出完全相同的错误把我赶走了。非常感谢你的帮助。