2012-11-09 61 views
2

我試圖產生以下數量範圍的正則表達式以色列郵編...正則表達式爲不同的號碼範圍

這是強制性的,我需要有00001或0000001爲起始號碼

ISRAEL NNNNN 00001 99999 
     NNNNNNN 0000001 9999999 

我與此正則表達式嘗試:^0*[0-9]{5}$|^0*[0-9]{7}$

但它失敗了以下場景。它接受這些不應該是的數字。

0100012 
000010121 
+2

我不不知道以色列郵政編碼,但他們看起來不必要的複雜。如果很清楚要​​實現什麼目標,那麼我認爲正則表達式不會太難。 –

+0

您不能爲第一部分00001或0000001添加支票,然後保留最後一部分嗎?看看你的表情,兩個數字都適用於^ 0 * [0-9] {7} $ – CBredlow

+2

爲了確保我明白,你想要00001後跟5個數字或0000001後面跟7個數字? –

回答

0

我認爲,OP試圖問的是怎麼寫的正則表達式保證了所有5或7位數字中至少有一個不是零(可能郵政編碼不能全爲零)。

很顯然,使用正則表達式來做這個W/O要容易得多。分析整數,看看它是否大於零,小於100000或1000000,然後就完成了。當然,如果你想強制你的用戶在代碼前面輸入額外的零......這是你的選擇。如今,用戶甚至還要遵守更加狡猾的要求。

但是,如果你感受到了任務的複雜性的挑戰,並希望它使用正則表達式無論價格來完成,那麼在這裏你去:

^(?:0*[1-9]0*)+$ 

這將確保的所有字符字符串是數字,並且至少有一個是非零的。另外檢查字符串的長度,你會發現它是否等於7或5.(這是一個相對簡單的方法)。

難的方法:

^\d{4}[1-9]|\d{3}[1-9]\d|\d{2}[1-9]\d{2}|\d[1-9]\d{3}|[1-9]\d{4}$ 

(這是5位郵政編碼,歡迎您來嘗試把它擴大到7位拉鍊碼):P

+0

嗨wvxvw,表達式^ \ d {4} [1-9] | \ d {3} [1-9] \ d | \ d {2} [1-9] \ d {2} | \ d [ 1-9] \ d {3} | [1-9] d {4} $適用於許多情況,但在以下情況下失敗。如果我在這種情況下輸入值10000,則失敗。 – JayP

0

這是不可能從你的問題告訴領先的數字是否包括在內,所以這裏的兩個版本:

包括首張數字:

^(00)?0{4}1\s+[0-9]{5}([0-9]{2})?$ 

如果沒有領先的數字:

^[0-9]{5}([0-9]{2})?$ 
  • (00)?0{4}1意味着「2個可選0然後4 0然後1
  • [0-9]{5}([0-9]{2})?意味着「5個數字,然後2個可選位」