0

我正在尝试从电话号码中删除 +1(国家代码)(我正在开展标准化项目)。例如,用户有一个格式为 +1(703)-555-5787 的电话号码,他希望它是 (703)-555-5787(前面没有 +1)。

我的理论是我可以根据正则表达式模式搜索 phoneNum 字符串。一旦找到它,我就可以打印它或做任何我喜欢的事情。我的代码如下所示:

public static String normalizePrefix(final String phoneNum) {
    String ret = phoneNum;

    if (!phoneNum.contains("+1")) {
        logger.log(Level.INFO, "input phone number doesn't contain country code (+1)");
    }
    else {          

        String regex = "(\\+1)([2-9][0-9][0-9])-([2-9][0-9]{2})-([0-9]{4})";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(phoneNum); 


            if (phoneNum.matches(regex)){
                ret = m.group().substring(2, m.end());
            }

    }
    logger.log(Level.INFO, phoneNum + "-->" + ret);
    return ret;
}

我错过了什么?

4

4 回答 4

0

所以,我想通了(我问了大约 20 分钟后,我试图回答我的问题,但 SO 不会让我)。尽管如此,还是感谢大家的反馈和支持,我真的很感激。

这是我的错误:

我的正则表达式是,String regex = "(\\+1)([2-9][0-9][0-9])-([2-9][0-9]{2})-([0-9]{4})";但我的 phoneNum 字符串是 +1(703)-555-4563。它给了我错误,因为正则表达式正在寻找许多这种格式:+1703-555-4563(区号周围没有 ())。因此,找到子串是不可能的,因为它不存在。我的正则表达式应该是String regex = "(\\+1)(\\([2-9][0-9][0-9]\\))-([2-9][0-9]{2})-([0-9]{4})";.

谢谢你们每一个人的帮助!

非常感激 :)

于 2013-07-08T14:53:18.243 回答
0

matches会尝试完全匹配模式..

因此,如果您在字符串之间有电话号码,您的正则表达式将不起作用。

使用 Matcher 的find方法

 if (m.find())
 {
      ret = m.group().substring(2, m.group().length());
 }
于 2013-07-03T17:37:36.503 回答
0

尝试正则表达式:

String regex = "\\([0-9]{3}\\)-[0-9]{3}-[0-9]{4}";

并将 if 块修改为:

if (m.find()){
            ret = m.group(0);
}
于 2013-07-04T10:24:35.433 回答
0

我在这里尝试并测试了以下正则表达式:

String regex = "\\([0-9]{3}\\)-[0-9]{3}-[0-9]{4}";

之后,修改 if 块:

if (m.matches()){
    ret = m.group(2);
}

这应该始终返回电话号码,无论 +1 前缀是否存在。

于 2013-07-04T11:42:45.373 回答