【问题标题】:Laravel double validation regex not workingLaravel双重验证正则表达式不起作用
【发布时间】:2016-12-21 04:32:30
【问题描述】:

我正在尝试用两位小数验证双精度,但我无法实现。 这是我尝试过的正则表达式和错误:

第一次尝试:

$validation = ['price' => 'regex:[0-9]+(\.[0-9][0-9]?)?'];

错误:

preg_match(): 未知修饰符'+'

第二次尝试:

$validation = ['price' => 'regex:[0-9]+(\.[0-9][0-9]?)?'];

错误:

preg_match():分隔符不能是字母数字或反斜杠

第三次尝试:

$validation = ['price' => 'regex:\d+(\.\d{2})?|\.\d{2}'];

错误:

preg_match():分隔符不能是字母数字或反斜杠

我从这个问题中得到了所有的正则表达式:Simple regular expression for a decimal with a precision of 2

我做错了什么?或者还有其他方法可以验证Laravel 中的两位小数的双精度数吗?

【问题讨论】:

  • 试试$validation = ['price' => 'regex:/[0-9]+(\.[0-9][0-9]?)?/'];
  • @WiktorStribiżew 谢谢它的工作,但有什么办法可以防止超过两位小数?
  • 您的意思是只允许1.22 而不允许1.233?试试$validation = ['price' => 'regex:/^[0-9]+(\.[0-9][0-9]?)?$/'];
  • @WiktorStribiżew 是的,非常感谢!!

标签: php regex laravel


【解决方案1】:

在下面试试这个代码

'column' => 'required|regex:/^\d+(\.\d{1,2})?$/',

【讨论】:

    【解决方案2】:

    只是为了改进 Wiktor 的答案,这部分用于 [0-9][0-9]? 检查小数点后是否有一位或两位数字,其中 [0-9]? 第二位是可选的。所以这可以通过以下来简化

    'regex:/^[0-9]+(\.[0-9]{1,2})?$/'
    

    这里{1,2} 告诉我们这里至少要小数点后多少位数。因此,如果有人想要修复更多数字,例如任何想要在小数点后最多 3 位数字,只需将 {1,2} 更改为 {1,3}

    也验证负数

    'regex:/^(-)?[0-9]+(\.[0-9]{1,2})?$/'
    

    在此处添加 (-)? 检查可选的减号。

    【讨论】:

      【解决方案3】:

      您需要使用正则表达式分隔符,最常见的是/.../。此外,为了确保匹配整个字符串,您需要锚点,^ 锚定在开头,$ 锚定在结尾:

      $validation = ['price' => 'regex:/^[0-9]+(\.[0-9][0-9]?)?$/'];
      

      【讨论】:

        猜你喜欢
        • 2014-04-21
        • 2016-08-01
        • 2019-03-28
        • 2021-01-07
        • 2021-06-18
        • 2018-11-29
        • 1970-01-01
        • 2011-03-01
        • 1970-01-01
        相关资源
        最近更新 更多