如何在Laravel5的请求类中验证金额

29

我的验证类看起来像这样

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class PaymentRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $rules = array(

                       'invoiceid'=>'required',
                       'recieved_amount'=>'required',
                       'ref_no'=>'required',
                       'date'=>'required',
                       'comment'=>'required'
                       );


    }
}

我希望验证recieved_amount是否为货币字段,如果输入了除货币以外的内容,则应进行验证。

有人能帮我吗?


什么是“Money”?它不只是一个数字吗? - Andrius
制作自定义验证。 - aldrin27
如果你所说的“money”是指“我们表达货币的格式”,那么它与你所在的国家有关。在美国和西班牙,一千美元并不相同。 - Amarnasan
@Amarnasan 我认为现在如果我只能将其验证为数字(浮点数,数字),那么可能就可以了。 - Vikram Anand Bhushan
1
@Amarnasan 实际上,一千美元在美国、西班牙或任何其他国家都是相同的。 - chesscov77
显示剩余2条评论
3个回答

89
你可以使用这个,例如('amount'代表金额):
public static $rules = array(
  'amount' => "required|regex:/^\d+(\.\d{1,2})?$/"
));

这个正则表达式适用于像'12'、'12.5'或'12.05'这样的数值。如果你需要更多小数点位数,将“2”替换为所需的允许小数位数即可。


所以我将在我的规则数组中添加 'amount' => "required|regex:/^\d*(\.\d{2})?$/" 这一行,它适用于整数和浮点数吗? - Vikram Anand Bhushan
2
是的,因为小数点部分是可选的。但是请使用您所在国家/地区的正确货币格式(例如,在美国,他们使用逗号而不是小数点)。 - Amarnasan
问题在于我的公司同时使用美元和印度卢比,还有其他一些国家的货币,例如阿联酋和土耳其。这就是为什么我只添加了一个通用验证。 - Vikram Anand Bhushan
2
我稍微修改了正则表达式,允许1或2个小数位,请看一下。 - Amarnasan
4
我会尝试将其翻译成通俗易懂的中文,但不改变原意:我会稍微修改一下这个正则表达式:regex:/^\d+(\.\d{1,2})?$/,以防止像.22这样的输入。 - Piotrek Zatorski
显示剩余2条评论

0
[ "required", "regex:/^(\d+|\d+(\.\d{1,2})?|(\.\d{1,2}))$/" ]

上述代码匹配所有以下模式。

12
12.5
12.05
0.23
8.32
12.33
.33
.5
.09

0

或者,如果您允许 .25 类型的输入,请按照以下规则进行扩展:

['required', 'regex:/^(\d+(\.\d*)?)|(\.\d+)$/']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接