【问题标题】:Regex masking all phone numbers except a specific range正则表达式屏蔽除特定范围以外的所有电话号码
【发布时间】:2023-03-11 00:58:01
【问题描述】:

如果可能,不是 100%,但我想将任何与我的 DID 范围不匹配的出站呼叫转换为设置的电话号码。

对于我们在澳大利亚的运营商,如果 ANI 不在其提供的范围内,则作为新规定的一部分,呼叫将被阻止。

我正在寻找的是这样的东西。

如果不是 +61 2 XXXX XXXX - +61 2 XXXX  XXXX ,则发送为 +612XXXX XXXX

抱歉,我对正则表达式没有真正的了解,甚至不知道从哪里开始。

不过,我开始研究我对它的了解。请善待。如果有人可以将我指向“白痴指南”链接,我将不胜感激。

【问题讨论】:

  • 您的演示/示例/描述还有很多不足之处。公平地说,您的数据来自+61 2 XXXX XXXX+61 2 YYYY YYYY+61 2 ZZZZ ZZZZ 形式的一个来源。您还有一串数字。对于此流中的每个数字+61 2 IIII IIII,如果它在+61 2 XXXX XXXX+61 2 YYYY YYYY 的包含范围内,则返回+61 2 IIII IIII,否则返回+61 2 ZZZZ ZZZZ
  • 你能澄清一下这个问题吗?您尝试以什么格式匹配电话号码?作为整数还是格式化字符串?你要求做的是微不足道的,你只需要定义问题。这将决定是否应该使用正则表达式。

标签: regex perl genesys


【解决方案1】:

当然可以。这只是你想做多少工作的问题。我不太确定你想要掩盖什么以及你想要原封不动地传递什么。几个特定的​​例子会有所帮助。您需要支持多少种不同的格式、国家等?

面对这些问题,我倾向于采用这种方法:

  1. 规范化数据。让它们看起来都一样。因此,例如,删除所有非数字。 +61 2 XXXX XXXX 变成 612XXXXXXXX。在此步骤中,您还将填写隐含信息,例如不包含国家代码的本地号码。 Number::Phone 可能很有趣,但也请注意,它是 CPAN 上最大的发行版。

  2. 现在应该更容易识别数字及其组成部分(因为如果不是,则说明您没有正确执行第 1 步)。您可以使用解析器而不是正则表达式。也就是说,获取国家代码,然后据此决定接下来要发生的事情。这就是我对Business::ISBN 中的 ISBN 所做的事情,它有一个组代码,然后是一个出版商代码(两者都是可变长度的。

  3. 一旦您能认出这个数字,就很容易选择一个范围。如果它在范围内,您就知道要替换什么。

【讨论】:

  • 我得到的关闭是匹配表达式 ^(sip[s]?:|tel:)(\+61)73212345)(\d{2})(.*) 和格式到 $1$2$3$4 但在 regex101.com 中验证时我似乎能够得到匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多