2017-01-08 116 views
1

最近,我使用regexpal来构建这个自定义正则表达式。 我正在为印度尼西亚的电话号码使用几个测试案例。如何为复杂的印度尼西亚电话号码格式构建正则表达式?

这里简单的一08xx-3456-789008xx34567890

一个例子,但它可以是一个有点混乱,如果我得到这个格式如下

here is my phone (08xx)34567890 
08xx.3456.7890 
08xx 3456 7890 
(+62) 8xx34567890 
(+62) 8xx-3456-7890 
+628xx34567890 
+62-8xx-3456-7890 
+628xx 3456 7890 

这里是正则表达式我有(08|628|62)[\s\)\-]*(\s|(\d){3,}) ,但我可以做不包括所有这些样本。

+62是国家代码

能否请你帮我的任何解决方案,以验证这些格式?

的电话号码可能包含字符串,而不是只是数字,因为它是一句

+1

我不知道为什么那个家伙投了票,没有任何评论 – lloistborn

+0

建议:先将零件拆分成四个逻辑组,分别为'(+62)','8xx','3456','7890 ',然后在将整个正则表达式模式放在一起之前单独处理这些变体 –

+2

什么是'x'?任何数字? '34567890'也是否有数字? –

回答

1

你可以尝试用正则表达式[().- ]先删除标记,并用空字符串替代的一部分。然后,您可以使用(?:\+62)?0?8\d{2}(\d{8})来匹配电话号码。这匹配可选+62,可选0,8,两位数字(xx)和电话号码:8位数字。组1包含电话号码。

+0

这可以是解决方案之一,但不是高效的方案之一。谢谢 – lloistborn

0

对于印度尼西亚的电话号码,这大致应该工作。

(\()?(\+62|62|0)(\d{2,3})?\)?[ .-]?\d{2,4}[ .-]?\d{2,4}[ .-]?\d{2,4} 

要看到它在行动: https://regex101.com/r/qtEg6H/3

也看到在下面的评论的答案更有效的方式。

+0

您的比赛组正在改变每场比赛。 – sweaver2112

+0

对不起,我有点新正则表达式。你能详细说明吗? –

+1

如果您不关心比赛组,请使用'(?:...)':请参阅稍微更清晰的版本:'\(?(?:\ + 62 | 62 | 0)(?:\ d {2 ,3})?\)?[.-]?\ d {2,4} [.-]?\ d {2,4} [.-]?\ d {2,4}'https:// regex101 .com/r/qtEg6H/4 – sweaver2112