Как распознать номер мобильного телефона в данном тексте? - PullRequest
2 голосов
/ 23 февраля 2010

Я хочу извлечь из текста действительные (на основе формата) мобильные номера.

например. 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 ]

1 голос
/ 23 февраля 2010

Простой поиск всех подходящих форматов строк в этом случае не является правильным способом. Оптимальным способом является использование регулярных выражений для нахождения всех совпадений телефонных номеров, но в Blackberry Java нет встроенных возможностей для обработки регулярных выражений.

Но вы можете использовать стороннюю библиотеку для J2ME, реализующей обработку RegEx, что-то. как это .

1 голос
/ 23 февраля 2010

По своему опыту я знаю, как это работает в моей операционной системе телефона. Он просматривает достаточно длинные последовательности цифр, разделенных набором разрешенных символов.

В принципе что-то вроде:

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

Это регулярное выражение является неоптимальным, поскольку оно также ищет длинные последовательности символов-разделителей. Вам, вероятно, также понадобится отфильтровать эти результаты.

Очень простой метод с некоторыми ложными срабатываниями, но ложные срабатывания являются IMPO лучше, чем промахи.

1 голос
/ 23 февраля 2010

Вы не должны использовать список образцов, которые вы получили, как руководство к реальным номерам мобильных телефонов. Например, последовательность номеров, показанная для Нидерландов, неверна, поскольку она охватывает не только номера мобильных телефонов, но и ВСЕ обычные номера телефонов (она не охватывает такие вещи, как номера 0800 и 0900, для которых применяются разные правила), и отсутствует элемент даже для этого. Я могу только предположить, что список также некорректен для других стран (и, конечно, он далеко не полный, поскольку не охватывает все страны, но, возможно, вы разместили только фрагмент).

Чтобы разобрать номер телефона, вам необходимо сначала удалить все пробелы и другие символы форматирования из того, что может быть номером телефона, затем проверить, имеет ли он правильную длину, равную единице, а затем попытаться определить, содержит ли он код страны или нет. Если он включает код страны, но не начинается с 00 или + (оба используются для обозначения международного номера), это может быть не телефонный номер. Включает ли он код города? Если да, то является ли код города кодом, связанным с мобильными телефонами (например, в Нидерландах все номера мобильных телефонов имеют код города 06, НО в прошлом это не всегда имело место, поэтому если у вас есть старый документ, код города 06 может в любом случае не будь номером мобильного телефона. После того, как вы вывели это (а мобильные номера AFAIK всегда включают код города), вы должны проверить, составляют ли оставшиеся номера что-то, что может быть реальным номером телефона без кода города, исходя из длины номера (подсказка: код города) + Нумер вместе должны быть 10 здесь, и я думаю, что везде).

И все это, учитывая, что правила могут быть разными для разных стран или даже для разных сетей в некоторых странах.

И, конечно, если вы найдете номер, который выглядит как действительный номер телефона, он все равно может не быть. Это может быть другой номер, который выглядит просто как номер телефона, но не так.

1 голос
/ 23 февраля 2010

Возможно, вы захотите проверить, подходит ли вам это:

0 голосов
/ 12 марта 2014

// 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;
        }
    }
...