正如@ellak 指出的那样,地窖代码正在形成一个陷阱:
/^((00)|(\+))961((\d)|(7[0168]))\d{6}$/.test("009617612345"); // true
这里的代码应该像这样中断:00 961 76 12345
,
但是 RegEx 实际上会像这样破坏它:00 961 7 612345
,因为7
在 中匹配\d
,其余部分被组合,正好是 6 位数字,并且匹配。
我不确定这是否真的有效,但我想这不是你想要的,否则你问题中的 RegEx 应该可以工作。
这是一个避免陷阱的有点长的正则表达式:
/^(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})$/
几个测试结果:
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009617012345")
false
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009618012345")
true
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009617612345")
false
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("0096176123456")
true