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

问题描述 投票:0回答:1

我正在使用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

完整的开机自检数据:

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

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

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

php regex preg-match
1个回答
1
投票

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

表示匹配1个或更多。您想要的是0或更多

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

© www.soinside.com 2019 - 2024. All rights reserved.