正则表达式:匹配两个条件中的任何一个?

Regular expression : match either of two conditions?

您好,我不太了解正则表达式。但是我在使用 angularJs.

进行表单验证时需要它

以下是要求

输入框应仅接受

(1) 前 2 个字母 alpha + 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})?$/"
                   ^                         ^^^^ 

参见regex demo

现在,模式将匹配:

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

你可以试试这个DEMO LINK HERE

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

它将接受:

  1. ab123456
  2. 12345678
  3. aa441236
  4. aw222222