Laravel正则表达式价格验证或为空

时间:2018-07-02 18:47:46

标签: php regex laravel

我正试图为价格制作一个正则表达式或为空。 我有实际起作用的价格部分(荷兰使用逗号而不是点)

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

上面的正则表达式可以对值21,99进行确认

现在我尝试添加空部分,以便该字段可以...只是空^ $

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

但是,一旦我更改了正则表达式,Laravel就开始抱怨: “方法[validate ^ \ d +(,\ d {1,2})?$)/]不存在。”

工作正常:

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

Laravel拒绝...:

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

Kenken9990答案-Laravel不再中断,但空值仍然是错误的:

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

2 个答案:

答案 0 :(得分:7)

这工作吗?

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

答案 1 :(得分:2)

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

例如,以下内容有效:

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

要使用正则表达式,您需要切换到使用数组:

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

documentation中也指出了这一点:

  

注意:使用regex / not_regex模式时,可能需要在数组中指定规则而不是使用管道定界符,尤其是在正则表达式包含管道字符的情况下。

顺便说一句,原始规则也可能会做您想要的事情,也可以写为:

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