如何识别给定文本中的手机号码?

时间:2010-02-23 08:04:36

标签: blackberry java-me

我想从文本中提取有效(基于格式)手机号码。

e.g。 I / O一些文字(987)456 7890,(987)-456-7890再一些文字

O / P 9874567890 9874567890

问题是,全世界有许多有效的移动格式,如。

text = "Denmark 11 11 11 11, 1111 1111 "
        // + "Germany 03333 123456, +49 (3333) 123456 "
        // + "Netherlands + 31 44 12345678 Russia +7(555)123-123 "
        // + "spain 12-123-12-12 switzerland +41 11 222 22 22 "
        // + "Uk (01222) 333333 India +91-12345-12345 "
        // + "Austrailia (04) 1231 1231 USA (011) 154-123-4567 "
        // + "China 1234 5678 France    01-23-45-67-89 "
        // + "Poland (12) 345 67 89 Singapore 123 4567 "
        // + "Thailand  (01) 234-5678, (012) 34-5678 "
        // + "United Kingdom 0123 456 7890, 01234 567890 "
        // + "United States (987) 456 7890, (987)-456-7890+ etc."
  1. 如何涵盖所有移动格式?
  2. 手机号码的最小和最大长度(有或没有国家/地区代码)?
  3. 如何识别手机号码是否包含国家/地区代码?

5 个答案:

答案 0 :(得分:1)

您可能需要检查这是否符合您的需求:A comprehensive regex for phone number validation

答案 1 :(得分:1)

根据经验,我知道这在我的手机操作系统中是如何工作的。它查看足够长的数字序列,由一组允许的字符分隔。

原则上类似:

[\+]?([0-9]|[\(\).- ]){min,max}

这个正则表达式不是最理想的,因为它也寻找长序列的分隔符字符。您可能还需要过滤掉这些结果。

一种非常简单的方法,有一些误报,但误报是IMPO比错过更好。

答案 2 :(得分:1)

您不应该使用您获得的样本列表作为实际手机号码的指南。 例如,为荷兰显示的数字序列不正确,因为它不仅涵盖移动电话号码,而是涵盖所有常规电话号码(它不包括适用不同规则的0800和0900号码等)并且缺少元素甚至为此。 我只能认为该列表对于其他国家来说同样不正确(当然,它并不完整,因为它不包括所有国家,但也许您只发布了一个片段)。

要解析电话号码,您必须首先删除可能是电话号码的所有空格和其他格式字符,然后检查它是否具有正确的长度,然后尝试推断它是否包含国家代码与否。 如果它包含国家代码但不以00或+开头(两者都用于表示国际号码),那么它可能不是电话号码。 它是否包含区号?如果是这样,区域代码是否与移动电话相关联(例如在荷兰,所有移动电话号码都有区号06,但过去并非总是这样,所以如果你有一个旧文件06区号可能反正不是手机号码。 在您推断出(并且AFAIK手机号码始终包含区号)之后,您必须检查剩余号码是否构成可能是实际电话号码的内容,而不包含基于号码长度的区号(提示:区号+数字在这里必须长10,我想到处都是。)

同时考虑到不同国家甚至某些国家的不同网络规则可能会有所不同。

当然,如果你发现一个看起来像有效电话号码的号码,它仍然可能不是。 它可能是其他一些看起来像电话号码的号码但不是。

答案 3 :(得分:1)

在这种情况下,简单搜索所有匹配的字符串格式是不正确的。最佳方法是使用正则表达式查找电话号码的所有匹配项,但Blackberry java没有处理正则表达式的内置功能。<​​/ p>

但是你可以使用第三方库来实现RegEx处理的J2ME,smth。比如this

答案 4 :(得分:0)

// Regex - 查看新加坡有效的手机号码

    public static boolean isSingaporeMobileNo(String str) {
        Pattern mobNO = Pattern.compile("^(((0|((\\+)?65([- ])?))|((\\((\\+)?65\\)([- ])?)))?[8-9]\\d{7})?$");
        Matcher matcher = mobNO.matcher(str);
        if (matcher.find()) {
            return true;
        } else {
            return false;
        }
    }