【发布时间】:2015-08-21 13:23:26
【问题描述】:
我有一个表单,我在其中使用preg_match 函数来验证字段。我有一个通用的匹配函数。函数validateForm() 在脚本中较早地被调用,并具有适当的值。
当函数没有传递任何值时,尽管有正确匹配的信息,所有字段都会显示错误消息。 没有参数的广义函数:
function validateForm() {
if(preg_match()) {
return true;
}
else {
return false;
}
} // end function validateForm
当我只传递一个特定的正则表达式/字段对参数时,所有字段都会开始验证并在适当的时候显示错误消息(因此尽管函数中有特定于字段的参数,但基本上代码可以正常工作)。例如,当我将这个单一的正则表达式/字段参数传递给preg_match 时,所有字段都开始正确验证每个字段,而不管在这种情况下我只检查“城市”字段这一事实。 传递特定于字段的参数的示例,其中所有代码都“有效”:
function validateForm($cityRegex, $city) {
if(preg_match($cityRegex, $city)) {
return true;
}
else {
return false;
}
} // end function validateForm
有人可以向我解释一下,为什么当为特定字段传递特定参数时,该函数将适用于代码中的所有单个 preg_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
?>
【问题讨论】:
-
我不明白你的问题,我现在读了很多遍。你是在问为什么你的函数有效吗?!
-
我刚想问同样的问题 Lol ...
validateForm函数需要输入参数 ... 并在preg_match函数中使用它们... 所以,该函数应该是function validateForm($reg,$str) { if(preg_match($reg,$str) )...我要停在那里...你为什么不只使用$validate_first = preg_match($firstLastRegex, $first);Lol? -
@Rizier123 是的,我问为什么当我只为一个字段传递特定的正则表达式/值参数时它会验证所有字段。
-
对不起,我还是不明白你的问题是什么。 (当你的问题真的是,为什么这段代码有效时,很简单,因为你必须为你想要验证的文件指定 preg_match 中使用的正则表达式)
-
你必须对你的函数进行原型化,并且 preg_match() 来接受参数。没有什么可以阻止你在函数内(但在 preg_match 之前)插入代码以在传递空字符串时返回 false在。