удалите "+" или "0" из строки телефонного номера


Мне нужно в php регулярное выражение, чтобы удалить из строки телефонных номеров + или 0 в начале номера

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

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

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

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

... вот так

$sPhoneNumber = "3999999999999"

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

Author: axel, 2013-06-19

6 answers

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

$result = preg_replace('~^[0\D]++|\D++~', '', $sPhoneNumber);
 2
Author: Casimir et Hippolyte, 2013-06-19 15:39:10

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

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

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

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

 4
Author: Jason McCreary, 2013-06-19 15:35:02

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

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

 0
Author: Schleis, 2013-06-19 15:34:26

Просто intval() После этого, чтобы удалить начальные нули.

 0
Author: ogc-nick, 2013-06-19 15:34:59

Просто расширьте свое выражение несколькими альтернативными случаями:

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

См. http://ideone.com/fzj16b

 0
Author: Tomalak, 2013-06-19 15:39:54

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

// 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";
}
 0
Author: wardpeet, 2013-06-19 15:52:36