Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么preg_match函数使用特定字段参数验证所有字段?_Php_Regex_Function - Fatal编程技术网

Php 为什么preg_match函数使用特定字段参数验证所有字段?

Php 为什么preg_match函数使用特定字段参数验证所有字段?,php,regex,function,Php,Regex,Function,我有一个表单,其中我使用preg\u match函数验证字段。我有一个匹配的广义函数。函数validateForm() 当函数未传递任何值时,所有字段都会显示错误消息,尽管有正确匹配的信息无参数的广义函数: function validateForm() { if(preg_match()) { return true; } else { return false; } } // end function validat

我有一个表单,其中我使用
preg\u match
函数验证字段。我有一个匹配的广义函数。函数
validateForm()

当函数未传递任何值时,所有字段都会显示错误消息,尽管有正确匹配的信息无参数的广义函数:

    function validateForm() {

    if(preg_match()) {
        return true;
    }
    else {
        return false;
    }
} //  end function validateForm
    function validateForm($cityRegex, $city) {

    if(preg_match($cityRegex, $city)) {
        return true;
    }
    else {
        return false;
    }
} //  end function validateForm
当我只传递一个特定的regex/field pair参数时,所有字段都开始验证并在适当的时候显示错误消息(因此,尽管函数中有一个特定于字段的参数,但代码基本上仍能正常工作)。例如,当我将这个regex/field参数传递到
preg_match
中时,所有字段都开始正确验证每个字段,而不管我在这种情况下只检查“City”字段传递字段特定参数的示例,其中所有代码都“有效”:

    function validateForm() {

    if(preg_match()) {
        return true;
    }
    else {
        return false;
    }
} //  end function validateForm
    function validateForm($cityRegex, $city) {

    if(preg_match($cityRegex, $city)) {
        return true;
    }
    else {
        return false;
    }
} //  end function validateForm
有人能给我解释一下,为什么在为特定字段传递特定参数时,该函数会对代码中的所有单个
preg\u match
参数起作用?脚本正在按我所希望的方式运行,我只是不理解为什么特定参数使它能够验证所有字段

以下是所有PHP代码(如果需要):

<?php
    $first = '';
    $last = '';
    $phone = '';
    $city = '';
    $state = ''; 
    $error_message = '';

    $firstLastRegex = '/^[a-zA-Z]{2,15}$/';
    $lastRegex = '/^[a-zA-Z]{2,15}$/';
    $phoneRegex = '/^(\(\d{3}\))(\d{3}\-)(\d{4})$/';
    $cityRegex = '/^[a-zA-Z]{3,20}$/';
    $stateRegex = '/^[a-zA-Z]{2}$/';

    $validate_first = '';
    $validate_last = '';
    $validate_phone = '';
    $validate_city = '';
    $validate_state = '';

    $phone_string = '';



    if(isset($_POST['submit'])) {

        $first = $_POST['firstName'];
        $last = $_POST['lastName'];
        $phone = $_POST['phoneNumber'];
        $city = $_POST['userCity'];
        $state = $_POST['userState']; 

        $show_form = false;

        $phone_string = str_replace(array('-', '(', ')'), '', $phone);

        $validate_first = validateForm($firstLastRegex, $first);
        $validate_last = validateForm($lastRegex, $last);
        $validate_phone = validateForm($phoneRegex, $phone);
        $validate_city = validateForm($cityRegex, $city);
        $validate_state = validateForm($stateRegex, $state);


        if($validate_first == false) {
                $show_form = true;
                $error_message .= "Please enter your FIRST name between 2 and 15 letters.<br>";
        }

        if($validate_last == false) {
            $show_form = true;
            $error_message .= "Please enter your LAST name between 2 and 15 letters.<br>";
        }

        if($validate_phone == false) {
            $show_form = true;
            $error_message .= "Please enter your phone number in (###)###-### format.<br>";
        }

        if($validate_city == false) {
            $show_form = true;
            $error_message .= "Please enter your city name between 3 and 20 letters.<br>";
        }

        if($validate_state == false) {
            $show_form = true;
            $error_message .= "Please enter your state's abbreviation (Example: CA).<br>";
        }

    } // end if isset();

    else {
        $show_form = true;
        $error_message = "";
    } // end else


    // REGEX FUNCTION

        function validateForm() {

        if(preg_match()) {
            return true;
        }
        else {
            return false;
        }
    } //  end function validateForm

?>

您仍然需要函数的参数。下面的代码将使验证功能正常工作

    function validateForm($regEx, $field) {
    if(preg_match($regEx, $field)) {
        return true;
    }
    else {
        return false;
    }
} //  end function validateForm

我还看到了在使用post变量之前不检查它们是否已设置的其他潜在问题,并且您正在为所有if/else情况设置$show_form=true。我相信您可以通过一些调试语句来解决所有其他问题。

我不理解您的问题,现在我已经读了很多遍了。你是在问为什么你的功能有效吗?!我正要问同样的问题哈哈。。。
validateForm
函数需要输入参数。。。并在
preg_match
函数中使用它们。。。因此,函数应该是
函数validateForm($reg,$str){if(preg_match($reg,$str))
…我就到此为止…为什么不使用
$validate_first=preg_match($firstLastRegex,$first)
Lol?@Rizier123是的,我想问的是,当我只为一个字段传递一个特定的regex/value参数时,为什么它会验证所有字段。对不起,我还是不明白你的问题是什么。(当你的问题是,为什么这段代码有效时,很简单,因为你必须为你想要验证的文件指定preg_match中使用的正则表达式)你必须对你的函数进行原型化,并且preg_match()接受参数..没有什么可以阻止你在函数中插入代码(但在preg_match之前)传入空字符串时返回false。