Skip to content

Instantly share code, notes, and snippets.

@bjori
Created October 31, 2011 22:02
Show Gist options
  • Save bjori/1329153 to your computer and use it in GitHub Desktop.
Save bjori/1329153 to your computer and use it in GitHub Desktop.
Parsing crazy telephone numbers
<?php
function filter_number($number) {
if (substr($number, 0, 2) == "00") {
$number = "+". (string)(float)$number;
}
$l = strlen($number);
$retval = array(0 => "");
$idx = 0;
for($n=0; $n<$l; $n++) {
switch($number[$n]) {
case " ":
case ",":
case "/":
if (strlen($retval[$idx]) >= 7 && ($l-$n > 8)) {
++$idx;
$retval[$idx] = "";
}
if (!isset($number[$n+1]) ) {
break 2;
}
continue 2;
case "+":
if (strlen($retval[$idx]) == 0) {
$retval[$idx] = "+";
} elseif($l-$n > 8) {
$idx++;
$retval[$idx] = "";
} else {
}
default:
if (is_numeric($number[$n])) {
$retval[$idx] .= $number[$n];
}
}
}
if (!$retval[0]) {
return false;
}
if (strlen(end($retval)) < 8) {
array_pop($retval);
}
foreach($retval as &$number) {
if ($number[0] == "0") {
$number = substr($number, 1);
}
if ($number[0] == "+") {
continue;
}
switch(substr($number, 0, 2)) {
case '47':
case '46':
$number = "+" . $number;
break;
default:
$number = "+46" . $number;
}
}
return $retval;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment