2013-03-08 1 views
2

У меня есть список номеров, как это:список номеров во время зачистки все, кроме чисел

123-4-5679 tha 
546-5465-7 dsf 
98-4564-64 ds8 

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

$pn = preg_replace("/\r/", "\n", preg_replace("/\r\n/", "\n", $_POST['phone'])); 
$phone_numbers = explode("\n", $pn); 

ответ

4

Вы также можете сделать это с одной быстрой линии в регулярном выражении.

preg_match_all(":([0-9-]+):mi", $_POST["phone"], $match); 

Вот example

Edit: Чтобы удалить переносы перебирать результаты и замените дефисы с пустой строкой

preg_match_all(":([0-9-]+):mi", $_POST["phone"], $matches); 

// remove extra match array 
$matches = array_shift($matches); 

foreach($matches as & $match) 
{ 
    $match = preg_replace(":-:", "", $match); 
} 

Обновлено example

+1

Или '$ numbers = preg_match_all (": ([\ d -] +): ", $ phone, $ m)? $ m [0]: []; ' – hakre

+0

Мне нравится этот, но как мне удалить hypens? – thevoipman

+0

@thevoipman обновил мой ответ :) –

-2

Хорошо, я что-то пропустил?

$phone = explode(' ', $_POST['phone']); 
$phone_number = $phone[0]; 

Разве это не работает?

+0

Нет, он хочет лишить все, кроме цифр. –

1

Я бы раздеть все, кроме цифр и символов новой строки:

$cleaned = preg_replace("/[^0-9\n]/", "", $_POST['phone']); 

А потом explode это:

$numbers = explode("\n", $cleaned); 
0

Держите все номера, соответствуют всем остальным, кроме разделителей строк:

~(?![\d-]+).*~ 

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

$numbers = preg_replace("~(?![\d-]+).*~", '', $phone); 

Результат:

123-4-5679 
546-5465-7 
98-4564-64