首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找替代javascript查找电话号码regex模式的方法

寻找替代javascript查找电话号码regex模式的方法
EN

Stack Overflow用户
提问于 2020-12-04 16:20:25
回答 1查看 53关注 0票数 2

我有一个regex模式来检查输入电话号码。Regex模式是:

代码语言:javascript
运行
复制
(@"((?:\(?[2-9](?(?=1)1[02-9]|(?(?=0)0[1-9]|\d{2}))\)?\D{0,3})(?:\(?[2-9](?(?=1)1[02-9]|\d{2})\)?\D{0,3})\d{4})"

这对于服务器端验证很好,而对于客户端则失败。我拿到Invalid group error了。

我对regex相当陌生,通过深入研究,我发现这是因为JS不支持查找。

我试着应用-逆字符串技术,但是模式太复杂了。有人能帮忙吗。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 18:12:41

您的所有条件构造都需要替换为一个非捕获组,该组在开始时包含一个负的前瞻性。一般来说,看起来就像

代码语言:javascript
运行
复制
(?(?=0)01|\d{2}) = (?:(?=0)01|(?!0)\d{2})

也就是说,将条件组转换为非捕获组,并向组中的每个选项添加限制。如果下一个字符是(?:(?=0)01|(?!0)\d{2}),则01匹配,否则,如果下一个字符不是0,则匹配任何两位数(当然,如果它们以0开头)。

所以,在你的具体情况下,改变

  • (?(?=1)1[02-9]|(?(?=0)0[1-9]|\d{2})) -> (?:(?=1)1[02-9]|(?:(?=0)0[1-9]|(?!0)\d{2}))
  • (?(?=1)1[02-9]|\d{2}) -> (?:(?=1)1[02-9]|(?!1)\d{2})

PCRE模式的确切JavaScript等效值是

代码语言:javascript
运行
复制
((?:\(?[2-9](?:(?=1)1[02-9]|(?:(?=0)0[1-9]|(?!0)\d{2}))\)?\D{0,3})(?:\(?[2-9](?:(?=1)1[02-9]|(?!1)\d{2})\)?\D{0,3})\d{4})

regex演示

但是,有些分组是多余的,因此可以将其缩短为

代码语言:javascript
运行
复制
\(?[2-9](?:(?=1)1[02-9]|(?:(?=0)0[1-9]|(?!0)\d{2}))\)?\D{0,3}\(?[2-9](?:(?=1)1[02-9]|(?!1)\d{2})\)?\D{0,3}\d{4}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65147061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档