Regular expression : match either of two conditions?

心已入冬 提交于 2019-12-12 17:19:45

问题


Hi I don't know much about regular expression. But I need it in form validation using angularJs.

Below is the requirement

The input box should accept only if either

(1) first 2 letters alpha + 6 numeric

or

(2) 8 numeric

Below are some correct Inputs :-

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

I tried data-ng-pattern="/(^([a-zA-Z]){2}([0-9]){6})|([0-9]*)?$/" , Its working fine for both the above condition but still it is accepting strings like S2D3E4F5 and may be many other combination as well.

What I am doing wrong I am not able to find it out.

Any help is appreciable !!!

Thanks


回答1:


In your regex, the two alternative branches are anchored separately:

  • (^([a-zA-Z]){2}([0-9]){6}) - 2 letters and 6 digits at the start of the string
  • | - or
  • ([0-9]*)?$ - optional zero or more digits at the end of the string

You need to adjust the boundaries of the group:

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

See the regex demo.

Now, the pattern will match:

  • ^ - start of string
  • ( - start of the grouping:
    • [a-zA-Z]{2}[0-9]{6} - 2 letters and 6 digits
    • | - or
    • [0-9]{8} - 8 digits
  • )? - end of the grouping and ? quantifier makes it match 1 or 0 times (optional)
  • $ - end of string.



回答2:


You can try this DEMO LINK HERE

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

It will accept:

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


来源:https://stackoverflow.com/questions/39613091/regular-expression-match-either-of-two-conditions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!