关于php:Laravel正则表达式验证价格或空

Laravel regex validation for price OR empty

我想做一个雷吉士的价格或空。我有实际工作的价格部分(荷兰语用逗号代替点)

1
/^\d+(,\d{1,2})?$/

上面的regex在值21,99上验证OK。

现在我尝试添加空部分,这样字段可以…只是空^ ^ $

1
/(^$|^\d+(,\d{1,2})?$)/

但拉拉维尔开始抱怨,一旦我改变了正则表达式:"方法[验证^d+(,d 1,2)?"$)/]不存在。"

工作OK:

1
2
3
$rules = [
    'price' => 'regex:/^\d+(,\d{1,2})?$/'
];

拉拉维尔说不……

1
2
3
$rules = [
    'price' => 'regex:/(^$|^\d+(,\d{1,2})?$)/'
];

KenKen9990回答-Laravel不再中断,但空值仍然错误:

1
2
3
$rules = [
    'price' => 'regex:/^(\d+(,\d{1,2})?)?$/'
];


这是工作吗?

1
2
3
$rules = [
    'price' => 'nullable|regex:/^(\d+(,\d{1,2})?)?$/'
];


|也是多验证规则的分隔符。

例如,以下内容是有效的:

1
 $rules = ["price" =>"nullable|numeric|between:0,99" ];

要使用regex,需要切换到使用数组:

1
2
3
$rules = [
    'price' => [ 'regex:/(^$|^\d+(,\d{1,2})?$)/' ]
];

文件中也指出了这一点:

Note: When using the regex / not_regex patterns, it may be necessary to specify rules in an array instead of using pipe delimiters, especially if the regular expression contains a pipe character.

顺便说一句,最初的规则也可以做你想做的,也可以写成:

1
2
3
$rules [
     'price' => [ 'nullable', 'numeric', 'between:0,99' ]
]