2012-01-06 70 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)而不使用正則表達式。

相關問題