正常表达电话号码与一些exlussion

时间:2016-06-29 08:36:06

标签: regex

我们遇到了以下规则的验证,

第一个字符应始终为“0”或“+46”或“0046”

长度应介于8 - 20之间(包括+如果有)

并阻止以下号码,

(0900x,+ 46900x,0046900x)。

(0939x,+ 46939x,0046939x)。

(0944x,+ 46944x,0046944x)。

(099x,+ 4699x,00469x)。

你能帮助我创建正则表达式,我尝试在https://regex101.com/上创建和测试它,但我很难创建它。

1 个答案:

答案 0 :(得分:0)

我想最简单的方法是

^(?:0|\+46|0046)(?:900|939|944|99)

首先检查国家/地区代码或0之前,然后检查区号的4种组合。

Check it out here at regex101

修改

如果您希望数字符合您的规则,您可以尝试使用否定的预测:

^(?!(?:0|\+46|0046)(?:900|939|944|99)).*

See this one here

或没有否定的预测:

^(?:[^0+]|0[^09]|\+[^4]|\+4[^6]|(?:\+46[^9])|(?:0046[^9])).*$

and this one here

修改2

好的,我们再来一次;)

这结果很艰难。但是我们走了:

^(?=.{8,20}$)(?>\+46|0046|0(?!0))(?!900|939|944|99)\+?\d*
  • 在开头添加一个正面预测以断言长度是否正确
  • 使用原子组匹配国家/地区代码 - 允许另一个双零00
  • Negativ预先禁止收费号码。

也进行了更改,因此它只允许数字(以及开头的可选+)。

See this one here