обрезать номер телефона с помощью регулярного выражения - PullRequest
2 голосов
/ 26 апреля 2010

Вероятно, простой вопрос регулярных выражений.

Как убрать все номера, кроме начальных +, из номера телефона?

т.е.

012-3456 => 0123456
+1 (234) 56789 => + 123456789

Ответы [ 8 ]

9 голосов
/ 26 апреля 2010
/(?<!^)\+|[^\d+]+//g

удалит все не-числа и оставит ведущий + в покое. Обратите внимание, что ведущий пробел приведет к сбою бита «оставить + в покое». В языках .NET это может быть включено в регулярное выражение, в других вы должны сначала удалить пробелы перед передачей строки в это регулярное выражение.

Пояснение:

(?<!^)\+: соответствует +, если только оно не находится в начале строки. (В .NET используйте (?<!^\s*)\+, чтобы указать начальные пробелы).

| или

[^\d+]+: соответствует любой серии символов, которые не являются ни числами, ни +.

До (с использованием (?<!^\s*)\+|[^\d+]+):

+49 (123) 234 5678
  +1 (555) 234-5678
+7 (23) 45/6789+10
(0123) 345/5678, ext. 666

После того, как:

+491232345678
+15552345678
+72345678910
01233455678666
2 голосов
/ 26 апреля 2010

В Java вы можете сделать

public static String trimmed(String phoneNumber) {
   return phoneNumber.replaceAll("[^+\\d]", "");
}

Это сохранит все +, даже если оно находится в середине phoneNumber. Если вы хотите удалить любой + в середине, то сделайте что-то вроде этого:

return phoneNumber.replaceAll("[^+\\d]|(?<=.)\\+", "");

(?<=.) - это lookbehind , чтобы увидеть, был ли предшествующий символ перед +.

System.out.println("[" + trimmed("+1 (234)++56789 ") + "]");
// prints "[+123456789]"
1 голос
/ 07 июля 2012

Как удалить все номера, кроме начальных +, из номера телефона?

Удаление ( и ) и пробелов из +44 (0) 20 3000 9000 приводит к недействительному числу +4402030009000. Это должно быть +442030009000.

Процедура уборки требует нескольких шагов для обработки кода страны (с кодом доступа или без него или +) и / или кода соединительной линии и / или знаков препинания по отдельности или в любой комбинации.

1 голос
/ 26 апреля 2010

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

#!/usr/bin/perl 
while (<DATA>) {
    print "DATA Read: \$_=$_";  #\n already there...
    s/\s*(.*)\s*/$1/g;
    $s=s/(^\+){0,1}//?$1:'';
    s/[^\d]//g;
    print "Formatted: $s$_\n====\n";
 }


 __DATA__
 012-3456
 +1 (234) 56789
          +1 (234) 56789
 1234-56789        |
 +12345+6789

Выход:

DATA Read: $_=012-3456
Formatted: 0123456
====
DATA Read: $_=+1 (234) 56789
Formatted: +123456789
====
DATA Read: $_=         +1 (234) 56789
Formatted: +123456789
====
DATA Read: $_=1234-56789        |
Formatted: 123456789
====
DATA Read: $_=+12345+6789
Formatted: +123456789
1 голос
/ 26 апреля 2010

Если поддерживаются глобальные регулярные выражения, вы можете просто заменить все символы, которые не являются цифрами или символом плюс:

s/[^0-9+]//g

Если глобальные регулярные выражения не поддерживаются, вы можете сопоставить столько возможных числовых групп, сколько может быть допустимо в заданном формате телефонных номеров:

s/([0-9+]*)[^0-9+]*([0-9+]*)[^0-9+]*([0-9+]*)[^0-9+]*([0-9+]*)/\1\2\3\4/
0 голосов
/ 26 апреля 2010

Вы не можете просто удалить символ «+». Он должен рассматриваться как «00» и относится к коду страны. «+ xx» совпадает с «00xx».

В любом случае, обработка телефонных номеров с помощью регулярных выражений подобна синтаксическому анализу HTML с помощью регулярных выражений ... почти невозможна, поскольку существует так много (правильных) форматов правописания.

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

0 голосов
/ 26 апреля 2010

используйте Perl,

my $number = // set it equal to phone number
$number =~ s/[^\d+]//g

Это по-прежнему позволяет использовать знак плюс в любом месте, если вы хотите, чтобы в начале он разрешал только знак плюс, я оставлю эту часть на ваше усмотрение. Вы не можете просто получить полный ответ, иначе не научитесь.

По сути, это то, что сейчас происходит, это то, что он заменит что-либо в $ number, не являющееся цифрой или знаком плюс, пустой строкой

0 голосов
/ 26 апреля 2010

Просто замените все, кроме цифр и + на ''

/[^\d+]/

В Python,

>>> import re
>>> re.sub("[^\d+]","","+1 (234) 56789")
'+123456789'
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...