正则表达式屏蔽除特定范围外的所有电话号码

问题描述

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

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

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

如果不是 +61 2 XXXX XXXX - +61 2 XXXX XXXX 然后发送为 +612XXXX XXXX

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

不过,我正在开始研究我对它的了解。请善待。如果有人可以将我指向“白痴指南”链接,我将不胜感激,因为我刚刚进入这个领域。

解决方法

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

遇到这些问题,我倾向于采用这种方法:

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

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

  3. 一旦您可以识别数字,就可以轻松选择一个范围。如果它在范围内,您就知道要替换什么。