Javascript 正则表达式:匹配两个条件之一?

Javascript 正则表达式:匹配两个条件之一?,javascript,angularjs,regex,angularjs-ng-pattern,Javascript,Angularjs,Regex,Angularjs Ng Pattern,嗨,我对正则表达式知之甚少。但我需要它在表单验证中使用angularJs 以下是要求 只有在以下情况下,输入框才应接受: (1)前2个字母字母字母+6个数字 或 (2)8个数字 以下是一些正确的输入:- (1) SH123456 (2)12345678 (3) sd456565 我尝试了data ng pattern=“/(^([a-zA-Z]){2}([0-9]){6})([0-9]*)?$/”,它在上述两种情况下都可以正常工作,但它仍然接受像S2D3E4F5这样的字符串,也可能是许多其他组

嗨,我对正则表达式知之甚少。但我需要它在表单验证中使用angularJs

以下是要求

只有在以下情况下,输入框才应接受:

(1)前2个字母字母字母+6个数字

(2)8个数字

以下是一些正确的输入:-

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

我尝试了
data ng pattern=“/(^([a-zA-Z]){2}([0-9]){6})([0-9]*)?$/”
,它在上述两种情况下都可以正常工作,但它仍然接受像S2D3E4F5这样的字符串,也可能是许多其他组合

我做错了什么,我无法发现

任何帮助都是值得感激的


感谢您的正则表达式中的两个可选分支分别锚定:

  • (^([a-zA-Z]){2}([0-9]){6})
    -字符串开头的2个字母和6个数字
  • |
    -或
  • ([0-9]*)?$
    -可选字符串末尾的零或多个数字
您需要调整组的边界:

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

现在,模式将匹配:

  • ^
    -字符串的开头
  • -分组的开始:
    • [a-zA-Z]{2}[0-9]{6}
      -2个字母和6个数字
    • |
      -或
    • [0-9]{8}
      -8位
  • )?
    -分组结束,
    量词使其匹配1或0次(可选)
  • $
    -字符串结束
    • 你可以试试这个

      它将接受:

    • ab123456
    • 12345678
    • aa441236
    • aw222222

    • 可能是@DavidR的副本否,这不是该副本。这是一个锚定问题。它在语义上与我的相同,所以它也会起作用。形式上的区别是这里只使用了一个嵌套捕获组,而我的没有嵌套组。两者的性能相似。两种情况下共有6个数值。这就是为什么我对6个数值使用公共部分。还有很多方法可以编写正则表达式。:)相当于^([a-zA-Z0-9]{2}[0-9]{6})$,似乎不是。除a1234567外,您的表达式也将被删除。但它需要前2个字母alpha+6@jensgram@revo当前位置如果有人对你的答案投了反对票,可能是他们有问题。我没有表达任何担忧,我只是要求“建设性的批评”。当给出的答案详细、有效且有帮助时,普通的否决票不会增加价值。在正常情况下,这是正确的,但在你收到否决票的时候不会。当然,如果我下次看到同样的行为,我会照我说的做。@revo请现在做。我当然会做,但在我确定我的投诉会得到考虑的更合适的时间做。
      ^(([a-zA-Z]{2}|[0-9]{2})[0-9]{6})?$