yii2中的dd / mm / yyyy格式日期验证

时间:2016-12-08 06:25:02

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

我想验证日期字段只接受(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'
],

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

<强>尝试

  

(/ ^((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} $)

答案 2 :(得分:0)

那个对我很好的

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

以下是YII2 DateValidator docs

的更多信息