我正在使用laravel验证系统。我有一个字段是数据库批发价格和价格是十进制。对于验证,我使用它。
'wholesale_price' => 'required|regex:/^\d*(\.\d{1,2})?$/',
但价格不能为0.我必须验证> 0
我该怎么做?在laravel min:1功能但这对我没用。因为我有0.005或0.02的价格
答案 0 :(得分:4)
你不应该regex
来解决这个问题。以下面的测试为例:
$input = ["wholesale_price" => 0.005];
$rules = ["wholesale_price" => "numeric|between:0.001,99.99"];
只要您需要numeric
规则,between
就会将要验证的值视为数字int
,float
,double
,等等)只要您没有传递$0.001
之类的字符串值,或者在验证之前删除任何不需要的字符,此方法将对0
以上的任何值以及您设置的最大值返回true (目前99.99
,但你可以根据自己的喜好设置它。)
这是一个简单的测试模板:
$input = [
"price" => 0
];
$input2 = [
"price" => 0.001
];
$rules = [
"price" => "numeric|between:0.001,99.99",
];
$validator = \Validator::make($input, $rules);
$validator2 = \Validator::make($input2, $rules);
dd($validator->passes());
// Returns false;
dd($validator2->passes());
// Returns true;
注意:如果price
是字符串值,也可以使用,如果您要将$
发送到服务器,请将其删除。
希望有所帮助!
答案 1 :(得分:0)
这个正则表达式怎么样:
/^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$/
说明:
^ # Start of string
\s* # Optional whitespace
(?=.*[1-9]) # Assert that at least one digit > 0 is present in the string
\d* # integer part (optional)
(?: # decimal part:
\. # dot
\d{1,2} # plus one or two decimal digits
)? # (optional)
\s* # Optional whitespace
$ # End of string
结论:
'wholesale_price' => 'required|regex:/^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$/',