2012-03-07 29 views
4

我想驗證一個字符串,符合下列條件:需要一個正則表達式 - 禁止所有零

  • 必須是長6個字符
  • 只有第一個字符可以是字母,數字,其餘必須是數字
  • 如果第一位是字母,它必須是大寫
  • 不能全部爲零

我有以下正EXP除了全零部分以外,所有東西都可以獲得。有沒有辦法禁止所有的零?

^[A-Z0-9][0-9]{5}$

就是做這個檢查正則表達式(並允許「000000」),但是專門檢查,這不是「000000」的唯一途徑?

謝謝。

+0

也許在這裏? http:// stackoverflow。com/questions/6311842/regular-expression-4-digits-in-a-row-but-can-be-all-zeros – Tim 2012-03-07 21:50:20

回答

16

只是有這樣一個負先行不允許全0:

/^(?!0{6})[A-Z0-9][0-9]{5}$/ 
+1

謝謝,這很好用! – RHarris 2012-03-07 22:02:40

+0

太嘮叨評論 – 2015-06-25 08:35:14

1

我會做兩遍。一個用你的第一個正則表達式,一個用新的正則表達式尋找全零。

1

如果您先檢查全零情況,然後在確定沒有全零應用您的正則表達式之後該怎麼辦?

if (NOT ALL ZEROS) 
    APPLY REGEX 
0

我認爲這樣做。它檢查不是000000和你原來的正則表達式。

(?!0{6})^[A-Z0-9][0-9]{5}$ 
0

(?!000000)[A-Z0-9][0-9]{5}如果超前是好的。

0

您可以使用(?!0+$)負先行,以避免匹配只包含1個或多個零的字符串:

/^(?!0+$)[A-Z0-9][0-9]{5}$/ 
    ^^^^^^^ 

regex demo。這種方法讓你只需在^之後複製/粘貼lookahead,而不用擔心消費部分匹配的字符數。

詳細

  • ^ - 串
  • (?!0+$)的開始 - 如果有1個或多個0字符到字符串的末尾失敗比賽的負先行($
  • [A-Z0-9] - 大寫ASCII字母或數字
  • [0-9]{5} - 五位數字
  • $ - 字符串結尾。