我看了一下旧帖子,但无法找到我的案例的答案。
我有正则表达式
"(?:(?:(?:\+|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}$
答案 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}