如何为复杂的印度尼西亚电话号码格式构建正则表达式?

时间:2017-01-08 18:30:00

标签: regex phone-number

最近,我正在使用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是国家/地区代码

你能帮我解决一下验证这些格式的方法吗?

  

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

3 个答案:

答案 0 :(得分:2)

您可以先尝试使用正则表达式[().- ]删除令牌,然后替换为空字符串。然后,您可以使用(?:\+62)?0?8\d{2}(\d{8})来匹配电话号码。这与可选的+62,可选的08,两位数(xx)和电话号码:8位数相匹配。第1组包含电话号码。

答案 1 :(得分:1)

对于印尼电话号码,这大致应该有效。

onItemClick

要看到它的实际效果: https://regex101.com/r/qtEg6H/3

另请参阅下面评论中的答案,以获得更有效的方法。

答案 2 :(得分:0)

// MARK:-验证不带国家代码的印度尼西亚手机号码 //数字应以8位数字开头

[TestMethod]
[TestCategory("APITests")]
[DataSource("System.Data.Odbc",
"Dsn=Excel Files;" +
"Driver={Microsoft Excel Driver (*.xls)};" +
"dbq=|DataDirectory|\\APITestData.xls;" +        
"defaultdir=.;" +
"driverid=790;" +
"maxbuffersize=2048;" +
"pagetimeout=5;" +
"readonly=true",
"APITestData$", 
DataAccessMethod.Sequential)]
[DeploymentItem("APITestData.xls")]
public void PostAndValidateAPITests(var Odbc, var param, var isReadonly, var API, var accessMethod)
{
    //UNIT TEST CASE CODE
}
相关问题