首页 > 解决方案 > 如何使用正则表达式忽略电话号码上的国家/地区代码(带和不带 +)

问题描述

所以我正在构建一个带有电话号码注册的应用程序。在 OTP 页面中,我想显示带有分隔符的电话号码(由用户输入),其规则如下:(我来自印度尼西亚,所以我的国家代码是 +62)

+628101234567890 -> +62810-1234-5678-90
628101234567890  -> 62810-1234-5678-90
08101234567890   -> 0810-1234-5678-90

有人可以帮帮我吗?之前谢谢

编辑:电话号码的范围为 9-14 位

标签: javaregex

解决方案


您可以将String::replaceAll^(.*)(....)(....)(..)$匹配多个组的正则表达式一起使用,例如:

String[] phones = {"+628101234567890", "628101234567890", "08101234567890"};
for (String phone : phones) {
    System.out.println(phone.replaceAll("(.*)(....)(....)(..)", "$1-$2-$3-$4"));
}

输出

+62810-1234-5678-90
62810-1234-5678-90
0810-1234-5678-90

你甚至可以使用这个正则表达式(.*)(\d{4})(\d{4})(\d{2})

细节

我想从头开始解释正则表达式:

  • (..)最后一组匹配 2 个字符
  • (....)(....)两组 4 个字符
  • (.*)和其他角色

推荐阅读