【问题标题】:Conditional regex javascript条件正则表达式 javascript
【发布时间】:2018-12-12 13:46:26
【问题描述】:

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

我想验证电话号码前是否有国家/地区ID,这个格式正确。

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

我已经成功使用 PCRE 引擎

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

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

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

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

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

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

【问题讨论】:

  • 听起来好像您只想将(\d{1,4}) 设为可选。试试^\+?((?:\([0-9]{1,4})\))?([0-9]{2})([. -]?[0-9]{2}){4}$,见this demo
  • 正是我想做的!似乎条件正则表达式不是我在这种情况下所需要的。我固执地尝试使用它,但您的解决方法要简单得多,谢谢

标签: javascript regex pcre


【解决方案1】:

正则表达式的((\()?(?(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 次可选空格、点或 -,后跟 2 位数字
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多