regex 如何使用正则表达式阻止使用国家I地区代码的地区[已关闭]

nfs0ujit  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(92)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
我有一个任务,阻止从某些地区的数字玩游戏。我的任务是实现这方面使用国家代码使用JavaScript。
例如:
号码自:+254、+256被拒绝,+1、+45被接受。
我所看到的大多数解决方案都是为了将所有号码与其国家代码包括在一起。
我要阻止以特定国家/地区代码开头的所有号码

wlsrxk51

wlsrxk511#

下面是一个使用正则表达式的解决方案,该正则表达式一次检查所有被阻止的国家前缀。

const blockedPrefixes = [ '+254', '+256' ];
const blockedRegex = new RegExp('^(' + blockedPrefixes.map(prefix => prefix.replace(/[\+\(\)]/g, '\\$&')).join('|') + ')');
console.log('blockedRegex: ' + blockedRegex.toString());

[ '+254-123-456-7890',
  '+256-123-456-7890',
  '+1-123-456-7890',
  '+45-123-456-7890'
].forEach(str => {
  let isBlocked = str.match(blockedRegex) ? 'blocked' : 'ok';
  console.log(str + ' => ' + isBlocked);
})

输出量:

blockedRegex: /^(\+254|\+256)/
+254-123-456-7890 => blocked
+256-123-456-7890 => blocked
+1-123-456-7890 => ok
+45-123-456-7890 => ok

正则表达式字符串说明:

  • '^-起点锚
  • ('-撷取群组的开头,用于逻辑or
  • blockedPrefixes--取前缀数组,并且:
  • .map(prefix => prefix.replace(/[\+\(\)]/g, '\\$&'))-对每个数组项中的特殊字符进行转义,使其不干扰正则表达式
  • .join('|')-将逻辑or的数组与|联接
  • ')'-捕获组结尾

相关问题