如何使用laravel中的验证使输入日期字段大于或等于另一个日期字段

时间:2014-11-19 13:28:09

标签: php validation laravel-4 blade

嗨,我使用laravel开发应用程序是否可以使用验证使输入日期字段大于或等于另一个日期字段。

我知道我可以通过jquery实现这一点,而且我已经有了这个工作,但我想知道这是否可以通过laravel验证实现,因为laravel已经有一些预定义的验证。

例如

protected $validationRules = array
    (   
      'a' => 'date',
      'b' => 'date|(some validation so that the b value is greater than or equal to that of 'a')'
    );

修改

如果有任何其他方法使用laravel概念解决问题,请告诉我

我试过

Validator::extend('val_date', function ($attribute,$value,$parameters) {
    return preg_match("between [start date] and DateAdd("d", 1, [end date])",$value);
});

提前致谢

4 个答案:

答案 0 :(得分:21)

我遇到了同样的问题。当日期相同时,beforeafter不起作用。这是我的简短解决方案:

注意: Laravel 5.3.25及更高版本具有新的内置规则:before_or_equalafter_or_equal


// 5.1 or newer
Validator::extend('before_or_equal', function($attribute, $value, $parameters, $validator) {
    return strtotime($validator->getData()[$parameters[0]]) >= strtotime($value);
});

// 5.0 & 4.2
Validator::extend('before_or_equal', function($attribute, $value, $parameters) {
    return strtotime(Input::get($parameters[0])) >= strtotime($value);
});

$rules = array(
    'start'=>'required|date|before_or_equal:stop',
    'stop'=>'required|date',
);

答案 1 :(得分:8)

Emil Aspman的回答是正确的,但对Laravel 5.2不起作用。这个解决方案适用于Laravel 5.2:

 Validator::extend('before_equal', function($attribute, $value, $parameters, $validator) {
     return strtotime($validator->getData()[$parameters[0]]) >= strtotime($value);
 });

答案 2 :(得分:0)

如果您使用自己的规则扩展Validator,那么正确的解决方案就是。文档中的一个简单示例:

Validator::extend('foo', function($attribute, $value, $parameters)
{
    return $value == 'foo';
});

了解更多here

答案 3 :(得分:0)

是的,您可以像这样使用after:datebefore:date

protected $rules = array(
    'date' => 'after:'.$yourDate
);

或者

protected $rules = array(
    'date' => 'before:'.$yourDate
);

它将完全按照您的描述完成。另请查看official documentation。 您还可以使用custom validation rules指定自己的规则。