2016-09-21 85 views
2

嗨我不太瞭解正則表達式。但我需要使用angularJs進行表單驗證。正則表達式:匹配兩種情況之一?

下面是

輸入框應該只接受的要求,如果任一

(1)前兩個字母的α+ 6數字

(2 )8數字

下面是一些正確輸入: -

(1)SH123456 (2)12345678 (3)sd456565

我試圖data-ng-pattern="/(^([a-zA-Z]){2}([0-9]){6})|([0-9]*)?$/",其工作細兩個以上的條件,但它仍然是接受象字符串S2D3E4F5,也可能是其他許多組合。

我在做什麼錯我無法找到它。

任何幫助是可觀的!

由於

+0

可能的重複[在正則表達式中,匹配一個或另一個,或兩者](http://stackoverflow.com/questions/13351990/in-a-regular-expression-match-one-thing-or-another - 或 - 兩者) –

+0

@DavidR不,這不是重複的。這是一個錨定問題。 – tchrist

回答

2

在您正則表達式中,兩個選擇分支分別錨定:

  • (^([a-zA-Z]){2}([0-9]){6}) - 2個字母,並在字符串的開始
  • | 6位 - 或
  • ([0-9]*)?$ - 字符串末尾可選零個或多個數字

您需要調整組的邊界:

data-ng-pattern="/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})?$/" 
       ^      ^^^^ 

regex demo

現在,該模式將匹配:

  • ^ - 字符串的開始
  • ( - 分組開始:
    • [a-zA-Z]{2}[0-9]{6} - 2個字母和6個數字
    • | - 或
    • [0-9]{8} - 8位數字
  • )? - 分組的結束和?量詞使得它匹配1或0次(可選)
  • $ - 字符串的結尾。
+0

@shreyansh記得標記爲接受答案。 – Tordek

+0

像往常一樣,歡迎所有downvoters提供建設性的批評。 –

+0

我大部分時間都是'regex'標記問題的觀察者,而且你非常瞭解它。每當你在**評論中表達你對給定的反對票的關注時,有人就我自己的回答/問題隨機投下一票。此類平庸的問題和答案通常不會獲得高票,但在類似的情況下,當您參與這些主題時會發生這種情況。由於投票不合法,我可以輕鬆地讓主持人注意您的帳戶。 – revo

2

你可以試試這個DEMO LINK HERE

^(([a-zA-Z]{2}|[0-9]{2})[0-9]{6})?$ 

它將接受:

  1. AB123456
  2. aa441236
  3. aw222222
+0

它在語義上與我的相同,所以它也可以工作。形式上的差異僅僅是1個嵌套捕獲組在這裏使用,而我的嵌套組沒有嵌套。兩者都有類似的表現。 –

+0

6種數值對於這兩種情況都是常見的。這就是爲什麼我使用6個數值的公共部分。並且有很多方法來編寫正則表達式。 :) –

+0

相當於'^([a-zA-Z0-9] {2} [0-9] {6})?$',好像。 – jensgram