3

嗨,我对正则表达式不太了解。但我需要它在使用 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 这样的字符串,并且可能还有许多其他组合。

我做错了什么我无法找到它。

任何帮助都是可观的!

谢谢

4

2 回答 2

7

在您的正则表达式中,两个替代分支分别锚定:

  • (^([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 次(可选)
  • $- 字符串结束。
于 2016-09-21T09:51:44.767 回答
2

您可以在此处尝试此演示链接

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

它将接受:

  1. ab123456
  2. 12345678
  3. aa441236
  4. aw222222
于 2016-09-21T09:59:36.513 回答