我需要一些正则表达式的帮助。我正在尝试验证字符串是否看起来像'yyyy-mm-dd',这是我到目前为止的代码:
case "date":
if (preg_match("/^[0-9\-]/i",$value)){
$date = explode("-",$value);
$year = $date[0];
$month = $date[1];
$day = $date[2];
if (!checkdate($month,$day,$year))
{
$this->errors[] = "Ogiltigt datum.";
}
} else {
$this->errors[] = "Ogiltigt datum angivet.";
}
break;
我对正则表达式很陌生,谢谢。
答案 0 :(得分:8)
您可以使用:
if ( preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}\z/', $value) ) { ...
然而,这种模式可以验证类似0000-40-99
模式细节:
/ # pattern delimiter
^ # anchor: start of the string
[0-9]{4} # four digits
- # literal: -
[0-9]{2}
-
[0-9]{2}
\z # anchor: end of the string
/ # pattern delimiter
答案 1 :(得分:2)
使用capturing group,您无需拨打explode
。
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $value, $matches)) {
$year = $matches[1];
$month = $matches[2];
$day = $matches[3];
...
}
\d
匹配任何数字字符。{n}
是量词:恰好与之前的模式匹配4次。$matches[1]
,$matches[2]
,...来访问匹配的群组
$matches[0]
包含完整匹配的字符串。答案 2 :(得分:0)
虽然你可以使用正则表达式,但也可以使用一个简单的函数来根据瑞典格式(yyyy-mm-dd)或任何其他格式验证日期。
function validateDate($date, $format = 'Y-m-d H:i:s') {
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
var_dump(validateDate('2014-01-11', 'Y-m-d')); // true
var_dump(validateDate('2014-1-11', 'Y-m-d')); // false
复制