条件正则表达式 javascript

Conditional regex javascript

我正在尝试制作一个可以匹配 phone 数字的正则表达式,因此请告诉我 phone 数字是否有效。

我想验证phone号码前是否有国家ID,这个格式正确。

例如:+(33)0123456789 我想确定用户是否开始键入第一个括号,它后面必须跟数字并以右括号结束。

PCRE引擎成功了

^[+]?((\()?(?(2)[0-9]{1,4})(?(2)\)))?([0-9]{2}){1}([\.\- ]?[0-9]{2}){4}$

但我意识到这种方式不适用于 javascript 引擎,不支持条件。

^[+]?((\()?((?=)[0-9]{1,4})((?=)\)))?([0-9]{2}){1}([\.\- ]?[0-9]{2}){4}$

它不能满足我的需求。我想检查是否设置了第一个括号,然后它后面必须跟数字和一个右括号。

所以我问你 javascript 中是否有解决方法来做到这一点?

非常感谢您的帮助,谢谢 :)

正则表达式的 ((\()?(?(2)[0-9]{1,4})(?(2)\)))? 部分正在匹配可选的较小模式序列。 (\()? 匹配一个可选的 ( 并将其放在第 2 组中。然后,如果第 2 组匹配,(?(2)[0-9]{1,4}) 匹配 1 到 4 个数字。如果第 2 组匹配,则 (?(2)\)) 匹配 )。基本上,这等于 (?:\([0-9]{1,4})\))?.

因此,您在这里不需要条件构造。

您可以使用

^\+?(?:\([0-9]{1,4})\)?[0-9]{2}(?:[. -]?[0-9]{2}){4}$

regex demo

详情

  • ^ - 字符串开头
  • \+? - 一个可选的 +
  • (?:\([0-9]{1,4})\)? - 可选序列:(,1 到 4 位和 )
  • [0-9]{2} - 2 位数
  • (?:[. -]?[0-9]{2}){4} - 出现 4 次可选的 space、点或 -,后跟 2 个数字
  • $ - 字符串结尾。