2015-04-27 57 views
1

我創建了一個接受產品代碼的文本字段。 我嘗試了很多方法,感到很失望。 產品代碼是有一些像驗證如下,密碼的正則表達式

Product code :315299AZ 

1.First 2 digits ranges from[01-31].,should not contain 00. 
2.Second 2 digits ranges from [01-52]., should not contain 00. 
3.Third 2 digits ranges from [00-99]. 
4.Last 2 are optional. But should accept only alphabets. Should not accepts numbers. 

請人幫我把它弄出來。

+1

如何選購是最後的2個字符?必須有2個,還是隻有一個可以接受?大寫是否重要? – pcurry

回答

4

您可以使用以下正則表達式:

(?!00)(([0-2][0-9])|31|30)(?!00)(([0-4][0-9])|51|50|52)(\d{2})([a-zA-Z]{2})? 

(?!00)是負先行也不至於讓00

Regular expression visualization

Debuggex Demo

+1

chakeriiimmm;) – revo

+0

它證實罰款。但最後2個地方的字母是可選的。如果我沒有在末尾輸入字母,它不匹配... – karthik

+0

@karthik所以你可以簡單地把最後一部分放在一個捕獲組中,並使用'?'令牌使其成爲可選的! ;)結帳編輯! – Kasramvd

3

你去那裏:

((0[1-9])|([1-2]\d)|(3[0-1]))((0[1-9])|([1-4]\d)|(5[0-2]))\d{2}([a-zA-Z]{2})? 

如果你不喜歡的樣子,aheads。

2

我知道這是不是精神,而是任何明智的語言支持正則表達式應該允許您訪問羣體,因此做沿着這些線路(僞代碼如下)的東西:

if product_code matches /^(\d\d)(\d\d)\d\d([a-zA-Z]{2})?$/ { 
    assert 1 <= int($1) <= 31 // validate first group 
    assert 1 <= int($2) <= 52 // validate second group 
} 

獎勵:實際上你可以閱讀。

(這是假設的最後一個可選組包含兩個或零個字符。如果一個字符是可以接受的,你可以用[a-zA-Z]{0,2}更換)