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

dd/mm/yyyy format date validation in yii2

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

(14/11/1993)

此外,如果月份是二月,则不应接受第 30 天和第 31 天。请帮助任何人,我已经尝试过下面的模式,但它在 Yii 2 中不起作用。它在 [=14 中显示错误=]

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

尝试

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

那个对我很有效

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

这里有更多信息YII2 DateValidator docs