Herşey,
Sanırım düzelttim. Mevcut giriş dosyaları için çalışıyor ve bunu yapmak için aşağıdaki 2 işlevi var!
function format_phone_number:
function format_phone_number ( $mynum, $mask ) {
$val_num = self::validate_phone_number ( $mynum );
if ( !$val_num && !is_string ( $mynum ) ) {
echo "Number $mynum is not a valid phone number! \n";
return false;
}
if ( ( $mask == 1 ) || ( $mask == 'xxx xxx xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'$1 $2 $3'." \n", $mynum);
return $phone;
}
if ( ( $mask == 2 ) || ( $mask == 'xxx xxx.xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'$1 $2.$3'." \n", $mynum);
return $phone;
}
if ( ( $mask == 3 ) || ( $mask == 'xxx.xxx.xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'$1.$2.$3'." \n", $mynum);
return $phone;
}
if ( ( $mask == 4 ) || ( $mask == '(xxx) xxx xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'($1) $2 $3'." \n", $mynum);
return $phone;
}
if ( ( $mask == 5 ) || ( $mask == '(xxx) xxx.xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'($1) $2.$3'." \n", $mynum);
return $phone;
}
if ( ( $mask == 6 ) || ( $mask == '(xxx).xxx.xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'($1).$2.$3'." \n", $mynum);
return $phone;
}
if ( ( $mask == 7 ) || ( $mask == '(xxx) xxx-xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'($1) $2-$3'." \n", $mynum);
return $phone;
}
if ( ( $mask == 8 ) || ( $mask == '(xxx)-xxx-xxxx' ) ) {
$phone = preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'($1)-$2-$3'." \n", $mynum);
return $phone;
}
return false;
}
function validate_phone_number:
function validate_phone_number ( $phone ) {
$format_pattern = '/^(?:(?:\((?=\d{3}\)))?(\d{3})(?:(?<=\(\d{3})\))'.
'?[\s.\/-]?)?(\d{3})[\s\.\/-]?(\d{4})\s?(?:(?:(?:'.
'(?:e|x|ex|ext)\.?\:?|extension\:?)\s?)(?=\d+)'.
'(\d+))?$/';
$nanpa_pattern = '/^(?:1)?(?(?!(37|96))[2-9][0-8][0-9](?<!(11)))?'.
'[2-9][0-9]{2}(?<!(11))[0-9]{4}(?<!(555(01([0-9]'.
'[0-9])|1212)))$/';
$valid = array('format' => false,
'nanpa' => false,
'ext' => false,
'all' => false);
if ( preg_match ( $format_pattern, $phone, $matchset ) ) {
$valid['format'] = true;
}
if ( !$valid['format'] ) {
return false;
} else {
$components = array ( 'ac' => $matchset[1],
'xc' => $matchset[2],
'sn' => $matchset[3]
);
$numbers = array ( 'original' => $matchset[0],
'stripped' => substr(preg_replace('[\D]', '', $matchset[0]), 0, 10)
);
if(preg_match($nanpa_pattern, $numbers['stripped'])) {
$valid['nanpa'] = true;
}
if ( $valid['nanpa'] ) {
if ( !empty ( $components['xn'] ) ) {
if ( preg_match ( '/^[\d]{1,6}$/', $components['xn'] ) ) {
$valid['ext'] = true;
}
} else {
$valid['ext'] = true;
}
}
if ( $valid['ext'] ) {
$valid['all'] = true;
}
}
return $valid['all'];
}
Dikkat edin, bunu bir sınıf kitaplığında buldum, dolayısıyla ilk işlevden / yöntemden "self :: validate_phone_number" çağrısı.
"Validate_phone_number" işlevinin 32 numaralı satırında şunu ekledim:
if ( !$valid['format'] ) {
return false;
} else {
bana geçerli bir telefon numarası değilse, gerekli olan yanlış dönüşü almak için.
Yine de bunu daha fazla veriye karşı test etmem gerekiyor, ancak mevcut veriler üzerinde mevcut formatla çalışıyorum ve bu belirli veri grubu için stil '8' kullanıyorum.
Ayrıca sürekli olarak hatalar aldığım için "uzantı" mantığını yorumladım, verilerimde bu bilgilerin hiçbirine sahip olmadığımı görüyorum.