适用于英国电话号码和电话代码的Java正则表达式

时间:2015-07-24 14:48:22

标签: java regex

我看了一下旧帖子,但无法找到我的案例的答案。

我有正则表达式

"(?:(?:(?:\+|00)44[\s\-\.]?)?(?:(?:\(?0\)?)[\s\-\.]?)?(?:\d[\s\-\.]?){10})" 

匹配下面的模式

+44 1642 468 592
+44-(0)207-54-60-022
(0)201 234 5678
0207 1345 678
01642.85.08.50

但不是

(017683) 927 43

(0207) 1345-678

(0207) 1345 678

我确实发现了一个正在使用该模式的正则表达式(017683)927 43但是我想知道这个正则表达式是否可以简化以匹配括号内的4,5或6位数的电话号码?

对于模式:(017683) 927 43

^\(0[0-9]{5}\) [0-9]{5}$|^\(01[0-9]{3}\) [0-9]{6}$|^\(01[0-9]1\)? [0-9]{3}? [0-9]{4}$

2 个答案:

答案 0 :(得分:4)

我想说,在这种情况下你不应该依赖正则表达式模式。

基本上,您应该知道您将要接受的数字标准,这将告诉您您希望从用户输入中消耗多少0-9位数。超过或低于的所有内容都将被丢弃,并通过“请输入有效数字”通知用户。

要获得数字位数,您需要获取用户输入并从中删除所有非数字字符。这将标准化用户输入的任何内容:

+44123 456 789
+44-123-456-789
4412345 6789
44 123-456-789  

等。

甚至

+44 123-----456----789

到同一个字符串44123456789

完成此操作后,如果字符串的长度与国际标准匹配,我们可以开始按国家代码,城市的位置分解它,并分析是否有有效的国家,城市等...

当你使用正则表达式时,你实际上描述了你同意在0到X的位置上遇到什么符号。所以如果你希望将“+, - ,Nothing,[0-9]”作为第一个元素,你需要在regexp expresion (\ + \ - [0-9]){0,1} 中明确提到这一点。

这只是第一个位置!

如果您期望其中的15个,这将使正则表达式不仅被其他人完全不可读,而且对您而言也是如此。

答案 1 :(得分:0)

您可以使用

(?:(?:(?:\+|00)44[\s\-\.]?)?(?:(?:\(?0\)?)[\s\-\.]?)?(?:\d[\s\-\.]?){10})|(?=\(?\d*\)?[\x20\-\d]*)(\(?\)?\x20*\-*\d){11}

Demo here