2012-01-06 71 views
0

我有1个文本输入框,因此用户可以按以下格式输入日期(我不想在月份,日期和年份使用3个单独的输入框) :查找日期是否包含使用preg_match的有效格式

mm/dd/yyyy (could be a single digit m/d/yyyy) 

mm-dd-yyyy (single digit m-d-yyyy) 

然后我想使用的preg_match来检查用户是否根据上述格式输入的值。如果是的话,我会提取月份,日期和年份(使用substr)并使用php函数checkdate()来检查有效日期,知道它是闰年并防止错误,例如9月31日...

我们希望,我绝不错过任何事...

眼下,即时通讯卡在试图找出如何使用的preg_match检查,如果用户已根据上述

这表明该格式输入有效日期是我想出来的...... ???

preg_match(d{2})(\d{2})(\d{4}) 

提取的月,日和年(看起来不错给我):

$date = trim($_POST['date']); 
$month = substr($date, 0, 2); 
$day = substr($date, 3, 2); 
$year = substr($date, 6, 4); 

最后,检查日期是有效的(看起来不错给我):

checkdate($month, $day, $year); 

谢谢

+0

如果你已经有'checkdate',任何使用正则表达式的理由? – zerkms 2012-01-06 03:48:22

+0

好的,所以我不需要regexps ...如果用户输入2/2/1974怎么提取月份,日期和年份? – Marco 2012-01-06 04:18:55

+0

'explode('/',$ str)' – zerkms 2012-01-06 04:21:03

回答

1

你可以用这样的东西:

if (preg_match("#^(\d{1,2})\D(\d{1,2})\D(\d{2,4})$", trim($date), $match) 
     and checkdate($match[2], $match[1], $match[3])) { 
    $timestamp = mktime(0, 0, 0, $match[2], $match[1], $match[3]); 
    echo "Date is valid"; 
} else 
    echo "Invalid date"; 

我在这里看到的唯一问题是,如果用户输入类似于06.01.12的内容,期待您的系统猜测2012年,而checkdate会想到第12年。您不能仅仅在开始时添加“20”字符串,因为另一个用户可能会输入类似于15.11.99的内容,并期待1999年的猜测。这可以通过基于JavaScript的日历的只读字段来解决,这会强制使用正确的日期格式,然后您可以简单地使用explode("-", $date)而不使用正则表达式。

相关问题