我需要能够在输入时验证英国电话号码,并在显示时以正确的格式显示它们。
我已经看过几个不可思议的RegEx示例,但它们没有为所有英国号码获得正确的格式或拒绝某些有效格式(或允许一些无效格式)。
我找到了所需格式的列表,它看起来正确(并且比我最初想象的要复杂得多)但是如何将其转换为“简单”的RegEx模式?
NSN长度:
格式:
NSN = 10:
NSN = 9:
NSN = 7:
注意:
答案 0 :(得分:0)
最简单(尽管不是最优雅)的解决方案是简单地将列表与|连接运营商,例如:
\(01\d\{4}\) \d{5}|\(01\d{3}) \d{6}|(01\d1) \d{3} \d{4}|0800 1111
关于这一点的好处是,如果你从列表中编写一个简短的转换脚本,你必须使用正则表达式,那么如果将来获得一个新列表,你可以重新生成正则表达式,而无需进行复杂的调试。 / p>
虽然您可以通过分解常见的子表达式来优化这一点,但只有在您发现性能有问题时才会这样做。在现代机器上使用合适的RE引擎不太可能。
答案 1 :(得分:0)
获取有效模式列表并执行以下步骤:
^
放在该行的开头,将$
放在该行的末尾。[0-9]{n}
,其中n
是位数。|
加入每一行。您可以手动执行这些步骤,也可以编写程序来执行这些步骤并为您生成正则表达式。
例如,如果你有这些模式:
那么正则表达式就是这样:
^\(01[0-9]{4}\) [0-9]{5}$|^\(01[0-9]{3}\) [0-9]{6}$|^\(01[0-9]1\) [0-9]{3} [0-9]{4}$
您可能还希望通过在其后面添加问号来使空格可选。