【问题标题】:Why isn't my PHP preg_match regex working? [duplicate]为什么我的 PHP preg_match 正则表达式不起作用? [复制]
【发布时间】:2020-03-31 17:34:10
【问题描述】:

我正在使用 HTML/PHP 读取用户输入的数据,我只希望用户能够输入数字,并在表单中加上句号,如果没有抛出错误。

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

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

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

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

【问题讨论】:

  • 看起来你只是想匹配一个空字符串,对吧?然后使用'/^[a-zA-Z\d.]*$/'
  • @WiktorStribiżew 这就是我要找的东西-谢谢

标签: php regex preg-match


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多