为什么我的PHP preg_match正则表达式不起作用?

时间:2019-12-06 17:43:51

标签: php regex preg-match

我正在使用HTML / PHP来读取用户输入的数据,我只希望用户能够输入数字,并且对表单进行句号处理,如果没有抛出错误。

由于表单是动态的,用户可以添加和删除表单字段,因此我需要针对所有POST变量运行pregmatch。 这是我的脚本:

array_walk_recursive($_POST, function ($v) {
    if (preg_match('/^[a-zA-Z.\d]+$/', $v))  {

    } else {        
                exit("Error: Special characters and spaces not allowed.");        

}
});

以下是POST失败的示例:

variable=HomeWin&fixtures=fixtures&option[]=1&number[]=2&option[]=11&number[]=&option4[]=1&away_number[]=2

响应:

Error: Special characters and spaces not allowed.

由于数字变量为空而失败:

&number[]=

当我像这样在末尾添加一个数字时,它会起作用:

&number[]=1

完整的POST数据:

variable=HomeWin&fixtures=fixtures&option[]=1&number[]=2&option[]=11&number[]=1&option4[]=1&away_number[]=2

我怀疑它可能会失败,因为当变量为空时,它将&视为用户输入的数据。

我如何修改我的正则表达式,使其接受空白变量?

1 个答案:

答案 0 :(得分:1)

/^[a-zA-Z.\d]+$

平均匹配1个或更多。您想要的是0或更多

如下 /^[a-zA-Z.\d]*$