我想通過使用正則表達式驗證日期輸入。Php正則表達式日期驗證
if(!preg_match("/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/", $_POST['variant']['sales_start'])) {
echo "invalid";
}
我想輸入的字符串是2011-02-03,但是它的失敗,我似乎無法找出原因。
有人可以告訴我我做錯了什麼嗎?
在此先感謝
我想通過使用正則表達式驗證日期輸入。Php正則表達式日期驗證
if(!preg_match("/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/", $_POST['variant']['sales_start'])) {
echo "invalid";
}
我想輸入的字符串是2011-02-03,但是它的失敗,我似乎無法找出原因。
有人可以告訴我我做錯了什麼嗎?
在此先感謝
你分離與破折號日期和正則表達式尋找斜線?
嘗試
if (!preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/", $_POST['variant']['sales_start']))
{
echo "invalid";
}
您還沒有允許其他分隔除了/
,但我也注意到你的正則表達式將使之類的東西9999/99/99。嘗試這樣的:
"/^(?:20|19)[0-9]{2}([-.\\/])(?:0?[1-9]|1[012])\\1(?:0?[1-9]|[12][0-9]|3[01])$/"
這並不完美,但它非常接近。這將允許任何操作:
將禁止以下內容:
仔細檢查[-.\\/]
一部分;這幾天我不習慣PHP,所以我不確定你是否需要\\
。
此外,使用PHP函數checkdate()
,以驗證您的日期按陽曆 - http://php.net/manual/en/function.checkdate.php
大廈從Justin的答案,我想添加過濾文本格式的日期。
允許:
等
"#^(((?:0?[1-9]|1[012])|(?:0?[1-9]|[12][0-9]|3[01])|([a-zA-Z]+))([.,]?[-.\\\/\s]))?(((?:0?[1-9]|1[012])|(?:0?[1-9]|[12][0-9]|3[01])|([a-zA-Z]+))([.,]?[-.\\\/\s]))?((?:20|19)[0-9]{2})$#"
我已經在這個解決方案限制了幾年19XX和20XX,但可以修改,如果需要的。我也不會讓年份處於第一位,因爲它不是典型的用戶格式。另外,如果你打算在JS中使用它,一定要刪除兩個分開的段中額外的'\'轉義。 (我發現PHP需要'/'在JS沒有的地方逃脫)
如何在正則表達式中使用破折號而不是斜槓? – Kristian 2011-02-17 17:28:46