我目前正在编写一些PHP表单验证(我已经验证过客户端)并且有一些重复的代码,我认为这些代码在一个漂亮的小PHP函数中运行良好。但是我无法让它工作。我确信这只是语法问题,但我无法确定它。
任何帮助表示感谢。
//Validate phone number field to ensure 8 digits, no spaces.
if(0 === preg_match("/^[0-9]{8}$/",$_POST['Phone']) {
$errors['Phone'] = "Incorrect format for 'Phone'";
}
if(!$errors) {
//Do some stuff here....
}
我发现我正在编写验证代码,我可以通过创建函数来节省一些时间和一些代码。
//Validate Function
function validate($regex,$index,$message) {
if(0 === preg_match($regex,$_POST[$index])) {
$errors[$index] = $message;
}
并称之为......
validate("/^[0-9]{8}$/","Phone","Incorrect format for Phone");
谁能明白为什么这不起作用?
注意我在处理此问题时已禁用客户端验证以尝试触发错误,因此我为“电话”发送的值无效。
答案 0 :(得分:4)
让我们再尝试一下。
你想这样使用它:
if (validate(...)) {
// It's ok
}
然后我建议:
function validate($regex, $index, $message, &$errors) {
if (isset($_POST[$index]) && 1 === preg_match($regex, $_POST[$index])) {
return true;
}
$errors[$index] = $message;
return false;
}
现在您有机会在错误时转出验证,或者您可以链接这些传递$错误并填写验证错误。没有使用全局变量。
答案 1 :(得分:1)
这是一个修复:
//Validate Function
function validate($regex,$index,$message) {
global $errors;
if(0 === preg_match($regex,$_POST[$index])) {
$errors[$index] = $message;
}
}
问题在于:
if(0 === preg_match($regex,$_POST[$index],$message)
$message
,一个字符串,是一个匹配数组应该去的地方。你不需要它。
从手册中:
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
答案 2 :(得分:0)
您缺少验证函数if的右括号 改变这个
if(0 === preg_match($regex,$_POST[$index],$message)
到此
if(0 === preg_match($regex,$_POST[$index],$message))