【问题标题】:How to build regex for complex Indonesian phone number format?如何为复杂的印尼电话号码格式构建正则表达式?
【发布时间】:2017-01-08 18:29:59
【问题描述】:

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

您能帮我提供任何解决方案来验证这些格式吗?

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

【问题讨论】:

  • 我不知道为什么那个家伙投了反对票,没有任何评论
  • 一条建议:首先将各个部分分成四个逻辑组:(+62)8xx34567890,然后在放置整个正则表达式模式之前分别处理变化一起
  • x 是什么?任何数字? 34567890 也有任何号码吗?
  • @MathiasR.Jessen 看到我的编辑先生,因为它不仅仅是数字,有时它后面是一串句子。
  • @NicolasMaltais 是的 x 是数字,34567890 应该只是一个数字

标签: regex phone-number


【解决方案1】:

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

【讨论】:

  • 这可能是一种解决方案,但不是有效的解决方案。谢谢
【解决方案2】:

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

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

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

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

【讨论】:

  • 你的比赛组随着每场比赛而变化。
  • 对不起,我对正则表达式有点陌生。你能详细说明一下吗?
  • 如果您不关心匹配组,请使用(?:...):请参阅这个稍微简洁的版本:\(?(?:\+62|62|0)(?:\d{2,3})?\)?[ .-]?\d{2,4}[ .-]?\d{2,4}[ .-]?\d{2,4}regex101.com/r/qtEg6H/4
  • 谢谢,这似乎更简单,结果相同。你每天都在学习新事物。
【解决方案3】:

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

class func validateMobileNumber(_ number: String) -> Bool {
    let numberRegEx = "[8][0-9]{10,14}"
    let numberTest = NSPredicate(format: "SELF MATCHES %@", numberRegEx)
    if numberTest.evaluate(with: number) == true {
        return true
    }
    else {
        return false
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2023-03-11
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多