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。