2016-09-21 127 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