我想验证日期字段只接受(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'
],
答案 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'];
];
}
的更多信息