2014-07-27 44 views
0

任何人都可以想出一個更好的方式來寫這個嗎?它有效,但有點難看。一個數字內的正則表達式模式

輸入的數據是這樣的:125100001個

前兩個數字是年份,接下來的兩個是週數,以及最後5串行。我想驗證一個angular input[number] pattern選項的週數不超過52。基本上只是所以在這裏充分利用$誤差場:)

是:

^\d\d(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-2]){1}\d{5}$ 
+0

什麼是編程語言 –

+0

在Angular.js中實現,如我在輸入[數字]模式選項中的鏈接所述。 –

+0

這是不是一個好主意,完全在正則表達式 –

回答

0

就本週部分:

[0-4]\d|5[0-2] 

所以整個正則表達式是:

^\d\d([0-4]\d|5[0-2])\d{5}$ 
+0

感謝您指出這一點!這直接回答了我的問題,儘管我對ghoti的原始邏輯有一些很好的討論。 –

+0

這對於OP來說可能不是問題,但是這將允許「00」爲一週數。 – zx81

1

使用這個:

^(\d{2})([0-4][1-9]|[1-5]0|5[12])(\d{5})$ 

  • 第一組括號(0[1-9]|1[0-2])的驗證一個月:01-12
  • 第二組括號([0-4][1-9]|[1-5]0|5[12])的驗證周:01-52
  • 如果你願意,你可以檢索每個組件1,2和2組成
+0

第二組圓括號很聰明。第一部分雖然,我做了**沒有**有限制的一年。任何值,00-99都是有效的。 –

+0

我錯過了。出於某種原因,我認爲前兩位數字是一個月。只是將它改爲'\ d {2}'(類似於串行) – zx81