2016-06-12 41 views
-3

我使用日期時間驗證這個表達式模式:正則表達式

$regexp = 
"/^([0][1-9]|[12][0-9]|3[0-1])\\/([0][1-9]|1[0-2])\\/(\d{4}) ([0-9]|1[0-2])\\:([0-5][0-9]) (am|pm)$/"; 

它沒有驗證這個input(但應):

11/06/2016 06:28 pm 

在哪裏它的問題?

+0

* *是什麼問題?尋求調試幫助的問題(「**爲什麼不是這個代碼工作?」)必須包括所需的行爲,*特定的問題或錯誤*和*在問題本身中重現它*所需的最短代碼* *。沒有**明確問題陳述**的問題對其他讀者沒有用處。請參閱:[如何創建一個最小,完整和可驗證的示例。](http://stackoverflow.com/help/mcve) –

+0

一個瘋狂的猜測,因爲你不給我們太多的工作就是你得到錯誤'(不是一個有效的修飾符「,是正確的?這是因爲之前的char是一個修飾符並且它不會被轉義,所以在這兩個/模式中都使它們成爲\ /並且看看它是否有效 – Andreas

+0

爲了清晰:'$ regexp =「/ ^([0] [1-9] | [12] [0-9] | 3 [0-1])\ /([0] [1-9] | 1 [0- ([0-9] | 1 [0-2]):([0-5] [0-9])(am | pm)$ /「;' – Andreas

回答

1

您在小時有一個錯誤。你的字符串是兩位數的小時,但正則表達式是一位數字。

preg_match("/([0][1-9]|[12][0-9]|3[0-1])\/([0][1-9]|1[0-2])\/(\d{4}) (0[0-9]|1[0-2]):([0-5][0-9]) (am|pm)/", $time); 

http://www.phpliveregex.com/p/g0B

+0

已經做了這個改變..但仍然沒有得到接受的字符串.. –

+0

@harshagarwal奇怪..你可以發佈字符串?我的意思是完整的字符串,因爲你的模式表明,條紋只能有時間價值,沒有別的。如果你在開始時刪除^和在結束時刪除$,它可以處理一個字符串,例如:'我在下班時間開車時間爲11/06/2016 06:28',但是$和^只能匹配'11/06/2016 06:28 pm' – Andreas

+0

thanx ...其工作.. :) –

0

你可以試試這個:

'^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/(19|20)\d{2} (0[0-9]|1[0-2]):[0-5][0-9] (am|pm)$' 

它會隨着時間的驗證01/01/1900之間的日期31/12/2099(DD-MM-YYYY)以hh:與上午或下午mm格式。

或者使用下面的一個驗證所有年除了0000

'^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4}(?<!0000) (0[0-9]|1[0-2]):[0-5][0-9] (am|pm)$' 
+0

爲什麼你把第一年呢?他的字符串有最後一年。 – Andreas

+0

哦!我沒有看到他的例子字符串 –

+0

繼續清理......'另外,您正在使用\ d {4},它將捕獲4位數字,但您需要dd中的2位數字,如在yyyy-mm-dd中。:-) – Andreas