外国の番号や拡張子の付いた番号を除外することはお勧めできません。これは、CRMインジェクションの特定の形式の一般的な数値を変換するために使用する例です。スパムスコアリングが含まれます。
<?php
function phoneNumber($value) {
$phoneScore = 0;
$numbers = preg_replace('![^0-9]!','',$value);
//if it's too small to be a US number, then ramp it up.
if (!empty($value)&&(strlen($numbers) < 10)){
$phoneScore = $phoneScore + 3;
} elseif (empty($value)){
$phoneScore = $phoneScore + 10;
}
return $phoneScore;
}
$numbers = array(
'(911 -535 -3535',
'800.555.1212',
'800 458 2180',
'800 - 458 2180',
'800 - 458-2180',
'',
'800-555-1212 ext# 212',
'+49 (0)69 974640',
'+86 (021) 5466-2808',
'+66 (02) 261-3525',
'+44 (020) 7626-0224',
'123456',
);
$patterns = array('![^0-9xX#+]!','!-+!','!-?[xX#]-?!','!#+!','!#!','!^-!');
$replacements = array("-","-",'#','#',' #','');
foreach ($numbers as $value){
$score = phoneNumber($value);
$clean_num = preg_replace($patterns,$replacements,$value);
echo "$value = Score $score.<br />\n Cleaned Number = $clean_num<br />\n<br />\n";
}
?>
出力は次のようになります。
(911 -535-3535=スコア0。クリーニングされた番号=911-535-3535
800.555.1212=スコア0。クリーニングされた番号=800-555-1212
800 4582180=スコア0。クリーニングされた番号=800-458-2180
800-4582180=スコア0。クリーニングされた番号=800-458-2180
800-458-2180=スコア0。クリーニングされた番号=800-458-2180
=スコア10。クリーニングされた数=
800-555-1212 ext#212=スコア0。クリーニングされた番号=800-555-1212#212
+49(0)69974640=スコア0。クリーニングされた番号=+49-0-69-974640
+86(021)5466-2808=スコア0。クリーニングされた番号=+ 86-021-5466-2808
+66(02)261-3525=スコア0。クリーニングされた番号=+ 66-02-261-3525
+44(020)7626-0224=スコア0。クリーニングされた番号=+ 44-020-7626-0224
123456=スコア3。クリーニングされた数=123456