首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用regex匹配数字的模式n位

使用regex匹配数字的模式n位
EN

Stack Overflow用户
提问于 2021-09-29 07:40:16
回答 1查看 126关注 0票数 1

我正在使用regex /^(\+88)?01[3-9]\d{8}$/

代码语言:javascript
运行
复制
let phoneNum = "+880136486336"

let validRegex = /^(\+88)?01[3-9]\d{8}$/;

console.log(validRegex.test(phoneNum));

匹配匹配某些字符串的模式,如

代码语言:javascript
运行
复制
+8801712345678
01712345678
01312349876

它工作得很好,但我也希望与01[n]匹配,n将是3-9。找出移动网络运营商的模式。

我想做这样的事

如果号码是01712345678,则打印“网络操作员A",

如果号码为+8801712345678,则打印“网络操作员A”

如果号码为01312349678,则打印“网络操作员B”

对于不同的n值,不同的运算符。

这里的017, 013, 014, 016, 015, 019, 018 是移动运营商代码,我想用它来找出基于移动号码的运营商。

我找不到任何办法。我怎么才能用regex做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-29 08:30:57

您可以在捕获组开始时捕获这三个数字,然后使用String#matchRegExp#exec获取实际匹配,如果有匹配,则获取组值并从字典中获取操作符名称:

代码语言:javascript
运行
复制
const phones = ['+8801712345678','01712345678','01312349876'];
const operators = {'017' : 'Operator A', '013' : 'Operator C', '014' : 'Operator B', '016' : 'Operator D', '015' : 'Operator E', '019' : 'Operator F', '018' : 'Operator G'};
const validRegex = /^(?:\+88)?(01[3-9])\d{8}$/; 
for (const phone of phones) {
  const match = validRegex.exec(phone);
  if (match) {
    console.log(phone, "=> Valid, belongs to", operators[match[1]])
  } else {
    console.log(phone,"=> NO MATCH");
  }
}

这里,

  • ^(?:\+88)?(01[3-9])\d{8}$:第一个可选组现在没有捕获,现在有一个ID =1的捕获组,(01[3-9])
  • validRegex.exec(phone)获取匹配的object
  • operators[match[1]]按键返回操作符名。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69372282

复制
相关文章

相似问题

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