我正在检查3个表达式。喜欢3个电话号码的条件。如果有人匹配,那么通过。 当我单独写这些时,它运作良好。 但是当我把它们组合起来时,它并没有检查长度约束。
我正在使用|分开并与.match进行比较
var number_card = /^((4[38][0-9]{13}))|((6[0-9]{12}([0-9]{3})?))|((8[5-8][0-9]{14}))$/;
答案 0 :(得分:2)
这里是你的正则表达式(以Python原始字符串形式):
number_card = re.compile(r"""
# One from 3 global alternatives:
^ # Either g1of3:
( # $1: ...
(4[38][0-9]{13}) # $2: ...
) # End $1: ...
| ( # Or g2of3: $3: ...
( # $4: ...
6[0-9]{12} #
([0-9]{3})? # $5: Optional ...
) # End $4: ...
) # End $3: ...
| ( # Or g3of3: $6: ...
(8[5-8][0-9]{14}) # $7: ...
) # End $6: ...
$ # Anchor to end of line|string.
""", re.VERBOSE)
如您所见,有三种全球替代方案。问题是^
字符串起始锚点仅适用于第一个备选方案,而$
字符串结束锚点仅适用于第三个备选方案。您需要在组内封装三个备选方案,以使锚点正常工作(再次以Python自由间隔模式):
number_card = re.compile(r"""
^ # Anchor to start of line|string.
(?: # One ... from 3 alternatives.
( # Either a1of3 $1: ...
(4[38][0-9]{13}) # $2: ...
) # End $1: ...
| ( # Or a2of3 $3: ...
( # $4: ...
6[0-9]{12} #
([0-9]{3})? # $5: Optional ...
) # End $4: ...
) # End $3: ...
| ( # Or a3of3 $6: ...
(8[5-8][0-9]{14}) # $7: ...
) # End $6: ...
) # End one ... from 3 alternatives.
$ # Anchor to end of line|string.
""", re.VERBOSE)
这里是JavaScript RegExp文字语法:
var number_card = /^(?:((4[38][0-9]{13}))|((6[0-9]{12}([0-9]{3})?))|((8[5-8][0-9]{14})))$/;
请注意,此模式中有许多不必要的组可以删除。
答案 1 :(得分:0)
如果没有正则表达式,就无法确定问题所在。但是你可以用Regexper自己想象你的正则表达式,也许你自己找到一个解决方案。