Разбор номера телефона (мобильный)

Есть ли функция или простой способ сократить телефонные номера до определенного формата?

Ввод может быть числом (мобильный, разные коды стран)

может быть

+4917112345678
+49171/12345678
0049171 12345678

или может быть из другой страны

004312345678
+44...

Я делаю

$mobile_new = preg_replace("/[^0-9]/","",$mobile);

чтобы убить все, кроме числа, потому что мне нужно это в формате 49171 (без + или 00 в начале), но мне нужно обрабатывать, если сначала вставляется 00 или, возможно, кто-то использует +49 (0) 171 или или входы 0171 (должно быть 49171.

поэтому первые числа ВСЕГДА должны быть в сельской местности без + / 00 и без (0) между ними.

Может кто-нибудь дать мне совет, как решить эту проблему?

0

Решение

Ты можешь использовать

(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)

чтобы соответствовать большинству ваших дел и просто заменить их ничем. Например:

$mobile = "+4917112345678";
$mobile_new = preg_replace("/(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)/","",$mobile);
echo $mobile_new;
//output: 4917112345678

regex101 Демо

Объяснение:

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

  1. (?:^(?:00|\+|\+\d{2})) Матчи 00, + или же + с двумя числами в начале вашей строки
  2. \/ соответствует / где-нибудь в строке
  3. \s соответствует пробелу в любом месте строки (соответствует символу новой строки в демонстрационном файле regex101, но я полагаю, что вы сопоставляете каждое число самостоятельно)
  4. \(\d\) соответствует номеру в скобках в любом месте строки

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

$mobile = "01712345678";
$mobile_new = preg_replace("/^0/","49",$mobile);
echo $mobile_new;
//output: 491712345678
0

Другие решения

Этот шаблон (49)\(?([0-9]{3})[\)\s\/]?([0-9]{8}) разделим число на три группы:

  • 49 — код страны
  • 3 цифры — код города
  • 8 цифр — номер

После матча вы можете построить чистое число, просто объединяя их \1\2\3,

Демо-версия: https://regex101.com/r/tE5iY3/1

Если это вас не устраивает, пожалуйста, объясните более точно, что вы хотите, с тестовым вводом и ожидаемым выходом.

0

Я рекомендую взглянуть на LibPhoneNumber от Google и его порт для PHP.
Он поддерживает многие форматы и страны и поддерживается в хорошем состоянии. Лучше не разбираться в этом самостоятельно.

https://github.com/giggsey/libphonenumber-for-php

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US");
0
По вопросам рекламы [email protected]