Laravel非零验证

时间:2016-03-30 16:43:15

标签: php validation laravel

我正在使用laravel验证系统。我有一个字段是数据库批发价格和价格是十进制。对于验证,我使用它。

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

但价格不能为0.我必须验证> 0

我该怎么做?在laravel min:1功能但这对我没用。因为我有0.005或0.02的价格

2 个答案:

答案 0 :(得分:4)

你不应该regex来解决这个问题。以下面的测试为例:

$input = ["wholesale_price" => 0.005];
$rules = ["wholesale_price" => "numeric|between:0.001,99.99"];

只要您需要numeric规则,between就会将要验证的值视为数字intfloatdouble,等等)只要您没有传递$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*$/',