2013-06-19 3 views
1

мне нужно в PHP регулярное выражение для удаления из строки телефонных чисел + или 0 в начале номераудалить «+» или «0» с номером телефона строку

У меня есть эта функция удалить каждый не-число символов

ereg_replace("[^0-9]", "", $sPhoneNumber) 

, но мне нужно что-то лучше, все эти примеры должны быть ...

$sPhoneNumber = "+3999999999999" 
$sPhoneNumber = "003999999999999" 
$sPhoneNumber = "3999999999999" 
$sPhoneNumber = "39 99999999999" 
$sPhoneNumber = "+ 39 999 99999999" 
$sPhoneNumber = "0039 99999999999" 

... как это

$sPhoneNumber = "3999999999999" 

любые предложения, спасибо вам большое!

+0

Вы хотите "003999999999999", чтобы стать "3999999999999"? Что, если число законно начинается с 0? –

+0

@mbratch это не сработает. например, возьмите это число: «909984302», ваше выражение приведет к «9998432» – stackErr

+0

@mbratch, который все равно приведет к тому же, что и – stackErr

ответ

1

Вы можете сделать это:

$result = preg_replace('~^[0\D]++|\D++~', '', $sPhoneNumber); 
0

Для удаления начало + или 0, это должно работать

ereg_replace('^(\+|0)+?', '', $sPhoneNumber);

0

Просто intval() потом удалить ведущие нули.

3

В качестве альтернативы регулярных выражений, вы можете использовать ltrim():

echo ltrim('003999999999999', '+0'); 

Вторым параметром является строка, список символов, в вашем случае + и 0.

Примечание: Это не приведет к удалению пробелов в строке, только + и 0 с самого начала.

0

Просто продлить ваше выражение на несколько альтернативных случаев:

ereg_replace("^\+|^00|[^0-9]", "", $sPhoneNumber) 

См http://ideone.com/fzj16b

+0

, который не работает над «039 99999999999», вы установили только точное число ноль (одно) , я хочу его generic – axel

+0

@axel Просто добавьте больше случаев или работайте с '^ 0 +' вместо '^ 00'. Я просто показал вам направление. – Tomalak

+0

Я понимаю это @Tomalak, но я не могу добавить неопределенные нули, я не знаю клиентов, сколько нулей может добавить, я должен предотвращать ошибки. – axel

0

Чтобы быть честным, вам не нужно регулярное выражение вообще. Вот и чистое решение.

// first remove spaces 
// trim + and 0 characters at the beginning 
ltrim(str_replace(' ', '', $sPhoneNumber), '+0'); 

это мой тестовый код

<?php 
$sPhoneNumber[0] = "+3999999999999"; 
$sPhoneNumber[1] = "003999999999999"; 
$sPhoneNumber[2] = "3999999999999"; 
$sPhoneNumber[3] = "39 99999999999"; 
$sPhoneNumber[4] = "+ 39 999 99999999"; 
$sPhoneNumber[5] = "0039 99999999999"; 

foreach ($sPhoneNumber as $number) { 
    $outcome = ltrim(str_replace(' ', '', $number), '+0'); 
    echo $number . ':' . "\t" . $outcome . '(' . ($outcome === '3999999999999' ? 'true' : 'false') . ')' . "\n"; 
} 
Смежные вопросы