試圖驗證一個字符串來檢查它是否具有格式07.05.2013,不知道如何處理它。檢查一個字符串是否有07.05.2013日期格式
想着檢查'。'是第3和第6個字符,然後檢查其餘的字符是否是數字,但我不知道如何實現這一點。
試圖驗證一個字符串來檢查它是否具有格式07.05.2013,不知道如何處理它。檢查一個字符串是否有07.05.2013日期格式
想着檢查'。'是第3和第6個字符,然後檢查其餘的字符是否是數字,但我不知道如何實現這一點。
如果您只需要解析日期,則可以使用php的日期時間功能。
<?php
$date = DateTime::createFromFormat('d.m.Y', '07.05.2013');
echo $date->format('Y-m-d');
?>
if (preg_match('/^\d{2}\.\d{2}\.\d\{4}$/', $yourstring)) {
...
}
如果您的字符串與dd.dd.dddd這樣的表達式匹配,那麼這將成立,其中d是數字。
您忘記了'^'和'$'匹配從開始到結束 – hek2mgl
是的,我做到了。謝謝 –
使用DateTime::CreateFromFormat()
方法。這將驗證您的輸入並同時創建一個日期對象(然後您可以使用它來處理日期)。
$dateObj = DateTime::CreateFromFormat('d.m.Y', $inputString);
如果日期是無效的或格式錯誤,$dateObj
將false
。
如果它是所需格式的有效日期,則$dateObj
將爲DateTime
對象。
希望有所幫助。
喜歡的東西:
$date = DateTime::createFromFormat('d.m.Y', $yourStringWhichMightBeADate);
if ($date)
{
// it's a date, so use it
}
或者:
$date = DateTime::createFromFormat('m.d.Y', $yourStringWhichMightBeADate);
if ($date)
{
// it's a date, so use it
}
要是下個月是第一個,而不是一個月的日子。
解決方案1:
下面是我做的方式,它的工作原理與每一個你決定進入(例如,輸入:「1996年2月12日」,「1996年12月30日」,「dasdsadas」等上..)
public function valid_date($inputdate){
$date = $inputdate;
if (strtotime($date)){
if (strpos($date,'.') !== false) {
list($day, $month, $year) = explode('/', $date);
return checkdate($month, $day, $year);
}else{
return false;
}
}else{
return false;
}
}
如果輸入的日期爲1996年10月10日,這也是一個有效的格式,或1996年10月2日,它不會接受他們,因爲我要求的用戶使用格式爲「。」。只要刪除「如果」你不想做這個驗證,就是這樣。
解決方案2:
在php.net,非常乾淨和有趣的發現這個!
public function valid_date($date, $format = 'd.m.Y'){
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
想驗證字符還是要驗證日期? – HamZa
將' - '更改爲'。'在正則表達式http://stackoverflow.com/questions/5032313/php-regex-date-validation – stark
是格式mm.dd.yyyy或dd.mm.yyyy? – DaGardner