【问题标题】:dd/mm/yyyy format date validation in yii2yii2中的dd/mm/yyyy格式日期验证
【发布时间】:2023-04-01 00:02:01
【问题描述】:

我想验证日期字段以仅接受 (dd/mm/yyyy) 格式,例如

(14/11/1993)

另外,如果月份是 2 月,它不应该接受第 30 天和第 31 天。请帮助任何人,我已经尝试过下面的模式,但它在 Yii 2 中不起作用。它在RegularExpressionValidator.php 中显示错误

[
    ['dateofbirth'], 
    'match', 
    'pattern' => '/^((([1-2][0-9])|([1-9]))/([2])/[0-9]{4})|((([1-2][0-9])|([1-9])|(3[0-1]))/((1[0-2])|([3-9])|([1]))/[0-9]{4})$/', 
    'message' =>'Invalid date'
],

【问题讨论】:

  • 您想通过模型中的规则进行验证吗?
  • 是的,我想在 rules@jigar 中验证
  • 等我准备一下
  • 感谢您抽出宝贵时间
  • 我觉得SiZE的回答是对的

标签: regex validation date yii2 yii2-advanced-app


【解决方案1】:
public function rules()
{
    return [
        ['dateofbirth', 'date', 'format' => 'dd/MM/yyyy'],
    ];
}

另一种方式取自this answer

public function rules()
{
    return [
        ['dateofbirth', 'validateDateOfBirth'],
    ];
}

public function validateDateOfBirth($attribute)
{
    $dateTime = DateTime::createFromFormat('d/m/Y', $this->$attribute);
    $errors = DateTime::getLastErrors();
    if (!empty($errors['warning_count'])) {
        $this->addError($attribute, 'Invalid date');
    }
}

【讨论】:

  • 是的,我已经尝试过这种类型的自定义验证,它是在拍照后验证,当时页面会刷新所以只有我需要模式,无论如何感谢你的时间。
【解决方案2】:

试试

(/^((0[1-9]|[12][0-9]|3[01])(/)(0[13578]|1[02]))|((0[1 -9]|[12][0-9])(/)(02))|((0[1-9]|[12][0-9]|3[0])(/)(0[ 469]|11))(/)\d{4}$/)

(^((0[1-9]|[12][0-9]|3[01])(/)(0[13578]|1[02]))|((0[1- 9]|[12][0-9])(/)(02))|((0[1-9]|[12][0-9]|3[0])(/)(0[469 ]|11))(/)\d{4}$)

【讨论】:

  • 我改变你的正则表达式,就像它正在工作一样 /^((0[1-9]|[12][0-9]|3[01])\/(0[13578]|1 [02]))|((0[1-9]|[12][0-9])\/(02))|((0[1-9]|[12][0-9]|3 [0])\/(0[469]|11))\/\d{4}$/
【解决方案3】:

那个对我很管用

public function rules()
{
    return [
        ['dateofbirth', 'date', 'format' => 'php:Y-m-d'];
    ];
}

这里有更多关于YII2 DateValidator docs的信息

【讨论】:

    猜你喜欢
    • 2022-11-29
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2016-01-02
    • 1970-01-01
    • 2013-07-06
    相关资源
    最近更新 更多