Laravel双重验证正则表达式不工作


Laravel double validation regex not working

我试图验证两个小数的双精度,但我不能做到这一点。这是正则表达式和我尝试的错误,我得到:

第一次尝试:

$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():分隔符不能是字母数字或反斜杠

我从这个问题中得到了所有的正则表达式:精度为2的小数的简单正则表达式

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

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

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

试试下面的代码

'column' => 'required|regex:/^'d+('.'d{1,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})?$/'

这里添加(-)?检查可选减号