Как извлечь номер телефона для строки с помощью регулярного выражения? - PullRequest
3 голосов
/ 27 февраля 2012

Если у меня есть строка, которая содержит следующее: Это 1 тест 123-456-7890
Мне нужно извлечь 1234567890 в качестве номера телефона.Я не хочу извлекать число 1, которое находится перед тестом.
Как я могу сделать это, используя регулярные выражения в Java?

Я знаю способ, но я не уверен, что это лучшее решение:

String inputString = "This is 1 test 123-456-7890";
string result =  inputString.replaceAll("(\\d{3})-(\\d{3})-(\\d{4})",""); 
String phoneNumber = inputString.replace(result, "");

Ответы [ 5 ]

9 голосов
/ 18 июня 2015

Лучшим и стандартным способом является использование libphonenumber . Существует функция findNumbers , которую вы можете использовать. Вот фрагмент кода

public static void  extractPhoneNumber(String input){


    Iterator<PhoneNumberMatch> existsPhone=PhoneNumberUtil.getInstance().findNumbers(input, "IN").iterator();

    while (existsPhone.hasNext()){
        System.out.println("Phone == " + existsPhone.next().number());
    }
}
6 голосов
/ 27 февраля 2012

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

Например, все перечисленные ниже номера телефонов правильно отформатированы:

+1-555-2345
+358(0)1234567
02 500 500
+31 44 55 66 77
123-456-7890
+82 (0) 77 233 ext. 3456
(09) 223 44 ext 123

Я уверен, что есть еще много форматов, которые являются местным соглашением.

Если после телефонного номера в текстовой строке ничего нет, я бы выбрал .*[^0-9-( )] ([0-9-( )]+)$, что соответствует концу строки.

В противном случае, я бы искал все вхождения ([0-9-( )]+) и , надеюсь , что есть только одно совпадение на запись (я полагаю, у вас есть какие-то границы входа в ваших данных ) это достаточно долго (9+ символов), чтобы быть номером телефона и выбрать его.

Ни один из этих подходов не принимает числа с ext.

6 голосов
/ 27 февраля 2012

Следующий код проверит номер телефона в указанной вами строке и напечатает его:

String str = "This is 1 test 123-456-7890";

Pattern pattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
    System.out.println(matcher.group(0));
}

Но, как указано в других ответах, многие телефонные номера (особенно не международные) не будут соответствовать шаблону.

2 голосов
/ 27 февраля 2012
(\d{3})-(\d{3})-(\d{4})

, который найдет xxx-xxx-xxxx, если вам нужна другая комбинация, настройте {x} для того числа, которое вы хотите видеть, например xxxxxxxxxx (\ d {10})

Здесьпример кода для использования регулярных выражений и получения результатов:

http://www.exampledepot.com/egs/java.util.regex/BasicMatch.html

1 голос
/ 24 ноября 2016
mobile_number = PhoneNumberUtils.stripSeparators(mobile);

Класс PhoneNumberUtils предоставляет различные функции для операций форматирования телефонных номеров. с помощью функции stripSeparators вы можете удалить все типы форматирования и получить точное целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...