PHP разделить имя и номер телефона (текст и номер) - PullRequest
0 голосов
/ 28 июня 2018

Я использую preg_split для отделения текста и номера телефона от строки.

Мои тестовые случаи ниже:

$string_one = "1. Maria +60136777000";
$string_two = "2. Rahul Khan 0146067705";
$string_three = "Johny +6013699900";
$string_four = "Henry 01363456900";

И это моя функция:

function split_them($str) {
    return preg_split("/(\D)(\d)/", $str);
}

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

// string_one
echo "";
print_r(split_them($string_one));
echo "
"; // выход Массив (2 0 => 1. Мария 1 => 0136777000 // <--- номер неполный ) // string_two echo "<pre>"; print_r(split_them($string_two)); echo ""; // выход Массив (2 0 => 2. Рахул Хан 1 => 146067705 // <--- номер неполный ) // string_three echo "<pre>"; print_r(split_them($string_three)); echo ""; // выход Массив (2 0 => Джонни 1 => 013699900 // <--- номер неполный ) // string_four echo "<pre>"; print_r(split_them($string_four)); echo ""; // выход Массив (2 0 => Генри 1 => 1363456900 //

Возможно, мое регулярное выражение неверно. Чего мне не хватает?

Ответы [ 4 ]

0 голосов
/ 28 июня 2018

Я предлагаю следующий preg_split код:

preg_split('~\s+(?=\+?\d+$)~', $s)

См. Демоверсию regex .

Он разбивает строку на последние 1+ пробелов (\s+), за которыми следуют необязательные + (\+?) и 1+ цифры (\d+) в конце строки ($).

Демонстрация PHP :

$re = '/\s+(?=\+?\d+$)/';
$strs = ['Johny +6013699900','2. Rahul Khan 0146067705','Johny +6013699900','Henry 01363456900'];
foreach ($strs as $s) {
    print_r(preg_split($re, $s));
}

Выход:

Array
(
    [0] => Johny
    [1] => +6013699900
)
Array
(
    [0] => 2. Rahul Khan
    [1] => 0146067705
)
Array
(
    [0] => Johny
    [1] => +6013699900
)
Array
(
    [0] => Henry
    [1] => 01363456900
)
0 голосов
/ 28 июня 2018
  • попробуйте это $ iparr = split ("/ + /", $ ip); print "$ iparr [0]";
0 голосов
/ 28 июня 2018

или как это:

function split_them($str) {
    preg_match("/(.+)\s+(.?\d{5,})/", $str, $matches);
    array_shift($matches);
    return $matches;
}

Вывод:

Массив ( [0] => 1. Мария [1] => +60136777000)

Array ( [0] => 2. Рахул Хан [1] => 0146067705)

Array ( [0] => Джонни [1] => +6013699900)

Array ( [0] => Гитлер [1] => 01363456900)

0 голосов
/ 28 июня 2018

Попробуйте разделить их на строки с помощью функции PHP explode (). Пример

$foo = "one two three";

print_r(explode(" ", $foo));

//Output
array (
0 => 'one',
1 => 'two',
2 => 'three'
)
...