我正在编写一个PHP脚本,它接受用户输入的值,必须是这样的.
2011-06-17 00:00:00
...
2011-06-17 23:59:59
Run Code Online (Sandbox Code Playgroud)
如何验证它确实是正确的输入?
Ale*_*sky 12
或者,在输入上使用strtotime(),然后在date()中使用所需的格式.这具有验证用户提供正确日期而不仅仅是正确格式的优点.也就是说,当有人在2月31日投入时,正则表达式检查不会被捕获.
$date = strtotime($input);
if ($date === false) {
throw Exception('bad date');
}
$formatted = date('<whatever>', $date);
Run Code Online (Sandbox Code Playgroud)
您正在寻找ISO 8601的验证.
以下是验证该格式的示例正则表达式:
^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
Run Code Online (Sandbox Code Playgroud)
http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
或者更好,
例:
$validator = new Zend_Validate_Date(array('format' => 'yyyy-MM-dd HH:mm:ss'))
$validator->isValid('2011-06-17 00:00:00');
Run Code Online (Sandbox Code Playgroud)