3

I need a regular expression in PHP to remove from a string of telephone numbers the + or the 0 at the beginning of a number.

I have this function to remove every not-number characters

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

but I need something better, all these examples should be...

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

... like this

$sPhoneNumber = "3999999999999"

any suggestions, thank you very much!

axel
  • 3,778
  • 4
  • 45
  • 72

6 Answers6

5

As an alternative to regular expressions, you can use ltrim():

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

The second parameter is a character list string, in your case + and 0.

Note: This will not remove whitespace within the string, only the + and 0 from the beginning.

Jason McCreary
  • 71,546
  • 23
  • 135
  • 174
3

You can do this:

$result = preg_replace('~^[0\D]++|\D++~', '', $sPhoneNumber);
Casimir et Hippolyte
  • 88,009
  • 5
  • 94
  • 125
1

Just intval() afterwards to remove leading zeroes.

km6zla
  • 4,787
  • 2
  • 29
  • 51
0

For removing the beginning + or 0, this should work

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

Schleis
  • 41,516
  • 7
  • 68
  • 87
0

Just extend your expression by a few alternative cases:

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

See http://ideone.com/fzj16b

Tomalak
  • 332,285
  • 67
  • 532
  • 628
0

To be honest you don't need regex at all. Here is a clean solution as well.

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

this is my test code

<?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";
}
wardpeet
  • 211
  • 1
  • 2
  • 10