【问题标题】:how to make an input date field greater than or equal to another date field using validation in laravel如何使用laravel中的验证使输入日期字段大于或等于另一个日期字段
【发布时间】:2015-01-17 01:00:37
【问题描述】:

嗨,我正在使用 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);
});

提前致谢

【问题讨论】:

    标签: php validation laravel-4 blade


    【解决方案1】:

    我遇到了同样的问题。 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',
    );
    

    【讨论】:

    • 请注意,这不适用于 Laravel 5.2 请参阅我的回答。
    • 你把第一段代码放在哪里?在你的控制器中?
    • @user3253002 你可以把第一块代码放在Service Provider
    • 这在 Laravel 4.2 中哪里去了?
    【解决方案2】:

    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);
     });
    

    【讨论】:

      【解决方案3】:

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

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

      或者

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

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

      【讨论】:

      • 感谢您的回复,我希望 after:date 只允许指定日期之后的日期我需要验证规则来满足 after 和 same 规则,这样我的日期字段将允许相同和 after date 但不允许日期之前。我也试过'date' => 'after:'.$yourDate,但它抛出以下错误:- [语法错误,意外'.',期待')']
      • afterbefore 在时间相等时不允许相等。
      【解决方案4】:

      正确的解决方案是使用自己的规则扩展验证器。文档中的一个简单示例:

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

      阅读更多here

      【讨论】:

      • 我阅读了文档,但我不确定如何编写表达式以满足我的条件我已经用我尝试过的内容更新了我的问题,请看一下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多