我正在使用regex /^(\+88)?01[3-9]\d{8}$/
let phoneNum = "+880136486336"
let validRegex = /^(\+88)?01[3-9]\d{8}$/;
console.log(validRegex.test(phoneNum));
匹配匹配某些字符串的模式,如
+8801712345678
01712345678
01312349876
它工作得很好,但我也希望与01[n]
匹配,n
将是3-9
。找出移动网络运营商的模式。
我想做这样的事
如果号码是01712345678,则打印“网络操作员A",
如果号码为+8801712345678,则打印“网络操作员A”
如果号码为01312349678,则打印“网络操作员B”
对于不同的n
值,不同的运算符。
这里的017, 013, 014, 016, 015, 019, 018
是移动运营商代码,我想用它来找出基于移动号码的运营商。
我找不到任何办法。我怎么才能用regex做这件事?
发布于 2021-09-29 08:30:57
您可以在捕获组开始时捕获这三个数字,然后使用String#match
或RegExp#exec
获取实际匹配,如果有匹配,则获取组值并从字典中获取操作符名称:
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)
获取匹配的objectoperators[match[1]]
按键返回操作符名。https://stackoverflow.com/questions/69372282
复制相似问题