我显然没有正确使用filter_var().我需要检查用户是否输入了有效日期,格式为"dd/mm/yyyy".
这只是返回我作为日期传递的任何内容,而我希望它返回日期或0/null/FALSE,以防输入字符串看起来不像日期:
$myregex = "/\d{2}\/\d{2}\/\d{4}/";
print filter_var("bad 01/02/2012 bad",FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=> $myregex)));
Run Code Online (Sandbox Code Playgroud)
如果其他人使用此功能检查日期,我做错了什么?我应该使用其他功能来验证表单字段吗?
谢谢.
Bab*_*aba 23
使用正则表达式来验证日期是一个坏主意..试想一下,99/99/9999
可以很容易地被看作是一个有效的日期..你应该了checkdate
bool checkdate ( int $month , int $day , int $year )
Run Code Online (Sandbox Code Playgroud)
简单用法
$date = "01/02/0000";
$date = date_parse($date); // or date_parse_from_format("d/m/Y", $date);
if (checkdate($date['month'], $date['day'], $date['year'])) {
// Valid Date
}
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 16
$myregex = '~^\d{2}/\d{2}/\d{4}$~';
Run Code Online (Sandbox Code Playgroud)
正则表达式匹配,因为您只需要在字符串中的任何位置使用该模式.你想要的只是那种模式而不是别的.所以添加^
和$
.
请注意,这仍然不意味着该值是有效日期.99/99/9999
将通过该测试.我用的是:
if (!DateTime::createFromFormat('d/m/Y', $string))
Run Code Online (Sandbox Code Playgroud)
在 PHP 中验证日期的一种简单便捷的方法是strtotime函数。您只需一行即可验证日期:
strtotime("bad 01/02/2012 bad"); //false
strtotime("01/02/2012"); //1325455200 unix timestamp
Run Code Online (Sandbox Code Playgroud)
为什么要使用繁重的 RegEx,而有一个原生的DateTime PHP 类?
$value = 'badbadbad';
try {
$datetime = new \DateTime($value);
$value = $datetime->format('Y-m-d');
} catch(\Exception $e) {
// Invalid date
}
Run Code Online (Sandbox Code Playgroud)
如果插入了有效的日期时间字符串,则始终返回您期望的格式。
归档时间: |
|
查看次数: |
24714 次 |
最近记录: |