2012-12-06 109 views
0

我希望我的用戶能夠輸入時間表。 如果需要更多信息,用戶用這個來表示完成任務需要多少時間,並且如果填充,它將被保存在數據庫中。正則表達式匹配時間

這裏是我有:

/^$|^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/ 

一個空的形式或01:30和01:30:00格式化的時間相匹配。我真的不需要秒,因爲每個任務至少需要一分鐘,但我試圖刪除它,它只是崩潰我的代碼,並刪除了空字符串的支持..我真的不明白正則表達式。

我想要的是匹配簡單的分鐘和簡單的時間,如3:30,3:00,5。這是可能的嗎?這將大大改善用戶體驗並限制浪費打字。但是我想保留零選項以防某些用戶覺得輸入它很自然。

+0

您使用哪種語言? –

+0

不要試圖自己驗證它。使用標準庫作爲您正在使用的任何語言。例如,在Perl中就是DateTime。匹配時間是一個不平凡的問題,它是一個解決不了的問題。更好地使用已經存在的經過良好測試的代碼,而不是編寫自己的代碼。 –

+0

我正在使用它在JavaScript中的飛行測試和重新檢查與PHP之前,它被上傳到數據庫。用戶必須儘可能簡單地以html格式輸入。這是一個食譜網站,時間是烹飪和準備時間,所以我找不到任何符合我需要的東西。 –

回答

1

我覺得下面的模式你想要做什麼:

p="((([01]?\d)|(2[0-4])):)?([0-5]\d)?(:[0-5]\d)?" 

第一部分:

(([01]?\d)|(2[0-3])):)? 

是一個可選的組與格式00-24小時交易。

第二部分:

([0-5]\d)? 

是一個可選的基團,如果數小時或秒中存在的表達,其與涉及分鐘。該小組還處理僅包含幾分鐘或只有幾小時的表達式。

第三部分:

(:[0-5]\d)? 

是處理秒的可選基團。

以下示例在工作顯示模式:

In [180]: re.match(p,'14:25:30').string 
Out[180]: '14:25:30' 

In [182]: re.match(p,'2:34:05').string 
Out[182]: '2:34:05' 

In [184]: re.match(p,'02:34').string 
Out[184]: '02:34' 

In [186]: re.match(p,'59:59').string 
Out[186]: '59:59' 

In [188]: re.match(p,'59').string 
Out[188]: '59' 

In [189]: re.match(p,'').string 
Out[189]: '' 

由於每個組是可選的模式也匹配空字符串。我已經用Python進行了測試,但我認爲它可以與其他語言一起工作,只需進行很少的更改。

+0

它的工作比我的嘗試好得多。我在單分鐘內仍然需要零點,但這一切都很好,因爲它可能使得更清晰的時間。它工作得很好!並感謝您解釋它。 –