2009-07-26 82 views
0

我需要一個正則表達式來限制0-24小時的輸入,其中小數的倍數爲.25。請記住以下條件必須滿足:正則表達式允許15分鐘增量的小時數

  • 當整體的一部分是0-23位,小數部分可能是2.0,1.25,0.5或0.75
  • 當整體的一部分是24 ,小數部分可以是0.0
  • 當沒有整體的一部分存在時,小數部分必須是0.0,0.25,0.5,或0.75
  • 空字符串不允許

我我非常有信心可以收緊以下表達方式,但這就是現實ce到目前爲止:

(^(([0-9])|(1[0-9])|(2[0-3]))(\.((0*)|(250*)|(50*)|(750*)))?$)|(^24(\.0*)?$)|(^\.((0+)|(250*)|(50*)|(750*))$) 

更新:正則表達式驗證存在於客戶端(javascript)和服務器(asp.net,c#)上。

+0

讓24.0和0.0一樣不合邏輯,因爲它們是同一時間。 – caf 2009-07-26 22:04:34

+0

@caf:除非你正在註冊持續時間而不是時間。小時登記系統,每天或某物。我衷心希望沒有人會需要使用「24」選項:) – Thorarin 2009-07-26 22:15:07

+0

當然,但0.0長度的預訂聽起來有點魚腥。 – caf 2009-07-27 03:58:13

回答

11

而你爲什麼絕對積極​​地需要做這個正則表達式呢?轉換爲數字並進行一些基本檢查會容易得多。

檢查數字乘以4是否是自然數< = 96,完成。

根據您的個人資料判斷,您可能正在使用.NET。我假設你希望這是一個正則表達式,因爲你正在使用它進行客戶端驗證。我會認真考慮在客戶端JavaScript中使用CustomValidator。

東西沿着這些線路爲JavaScript的:

<script type="text/javascript"> 
function checkDuration(text) 
{ 
    var tmp = parseFloat(text) * 4; 
    return tmp >= 0 && tmp <= 96 && Math.ceil(tmp) == tmp; 
} 
</script> 

編輯:我有點擔心使用花車當舍入誤差,但似乎摸出好了所有可能的情況。

+0

+1:是的,即使它正在搜索匹配字符串中的條件的數字(它不是,由錨定來判斷),只需要匹配數字並在回調函數中進行驗證仍然會更好。 – Blixt 2009-07-26 21:32:30

+0

@Thorarin - 好主意。爲了回答你的問題,Regex對我來說似乎是一個合理的選擇。驗證存在於客戶端(javascript)和服務器(asp.net,c#)上。謝謝。 – 2009-07-26 21:46:37

+0

好東西我正在寫一個JavaScript實現,你可以適應你的CustomValidator然後:) – Thorarin 2009-07-26 21:50:00

4
^((1?\d|2[0-3])?(\.(0|[27]?5)0*)|(1?\d|2[0-4])(\.0*)?)$ 
+0

+1。我更喜歡這個,因爲它不使用lookbehind斷言。使讀取更容易,語法兼容更多的正則表達式實現。 – Thorarin 2009-07-26 22:12:28

+0

+1 - 做得很好,這比我的嘗試要好得多。我將刪除我的這個。 – Tomalak 2009-07-27 08:55:02