1
0
mirror of https://github.com/nerzhul/ocsms.git synced 2025-06-07 16:06:15 +00:00

Fix duplicate + into formatted phones numbers and make localePrefix phonenumber regex as a static table

This commit is contained in:
Loic Blot 2015-01-09 18:12:33 +00:00
parent 38d0cea3df
commit c5a9324305

View File

@ -16,28 +16,32 @@ use \OCA\OcSms\Lib\CountryCodes;
class PhoneNumberFormatter { class PhoneNumberFormatter {
public static $intlPhoneNumber_rxp = array( // match international numbers with 1,2,3 digits public static $intlPhoneNumber_rxp = array( // match international numbers with 1,2,3 digits
'#^(00|\+)(1\d\d\d)#', // NANP '#^(00|\+)(1\d\d\d)#', // NANP
'#^(00|\+)(2[1|2|3|4|5|6|8|9]\d)#', // +2(1|2|3|4|5|6|8|9)x '#^(00|\+)(2[1|2|3|4|5|6|8|9]\d)#', // +2(1|2|3|4|5|6|8|9)x
'#^(00|\+)(2[0|7])#', // +2x '#^(00|\+)(2[0|7])#', // +2x
'#^(00|\+)(3[5|7|8]\d)#', // +3(5|7|8)x '#^(00|\+)(3[5|7|8]\d)#', // +3(5|7|8)x
'#^(00|\+)(3[0|1|2|3|4|6|9])#', // +3x '#^(00|\+)(3[0|1|2|3|4|6|9])#', // +3x
'#^(00|\+)(4[2]\d)#', // +4(2)x '#^(00|\+)(4[2]\d)#', // +4(2)x
'#^(00|\+)(4[0|1|3|4|5|6|7|8|9])#', // +4x '#^(00|\+)(4[0|1|3|4|5|6|7|8|9])#', // +4x
'#^(00|\+)(5[0|9]\d)#', // +5(0|9)x '#^(00|\+)(5[0|9]\d)#', // +5(0|9)x
'#^(00|\+)(5[1|2|3|4|5|6|7|8])#', // +5x '#^(00|\+)(5[1|2|3|4|5|6|7|8])#', // +5x
'#^(00|\+)(6[7|8|9]\d)#', // +6(7|8|9)x '#^(00|\+)(6[7|8|9]\d)#', // +6(7|8|9)x
'#^(00|\+)(6[0|1|2|3|4|5|6])#', // +6x '#^(00|\+)(6[0|1|2|3|4|5|6])#', // +6x
'#^(00|\+)(7)#', // +7 '#^(00|\+)(7)#', // +7
'#^(00|\+)(8[5|7|8|9]\d)#', // +8(5|7|8|9)x '#^(00|\+)(8[5|7|8|9]\d)#', // +8(5|7|8|9)x
'#^(00|\+)(8[1|2|3|4|6])#', // +8x '#^(00|\+)(8[1|2|3|4|6])#', // +8x
'#^(00|\+)(9[6|7|9]\d)#', // +9(6|7|9)x '#^(00|\+)(9[6|7|9]\d)#', // +9(6|7|9)x
'#^(00|\+)(9[0|1|2|3|4|5|8])#' // +9x '#^(00|\+)(9[0|1|2|3|4|5|8])#' // +9x
); );
public static $localPrePhoneNumber_rxp = array(
'#(^0)([^0])#' // in germany : 0-xx[x[x]]-123456
); //
public static function format ($country, $pn) { public static function format ($country, $pn) {
// If no country or country not found into mapper, return false // If no country or country not found into mapper, return original number
if ($country === false || !array_key_exists($country, CountryCodes::$codes)) { if ($country === false || !array_key_exists($country, CountryCodes::$codes)) {
return $pn; return trim($pn);
} }
$ignrxp = array( // match non digits and + $ignrxp = array( // match non digits and +
@ -52,22 +56,16 @@ class PhoneNumberFormatter {
'' ''
); );
/* $lpnrpl = CountryCodes::$codes[$country].'$2'; // replace with +{countryCode} -xx[x[x]]-123456
@TODO: make local settings in web-page
*/
$lpnrxp = array( // match local numbers
'#(^0)([^0])#' // in germany : 0-xx[x[x]]-123456
); //
$lpnrpl = '+'.CountryCodes::$codes[$country].'$2'; // replace with +{countryCode} -xx[x[x]]-123456
$tpn = trim($pn); $tpn = trim($pn);
if (preg_match('#^[\d\+\(\[\{].*#',$tpn)) { // start with digit, +, (, [ or { if (preg_match('#^[\d\+\(\[\{].*#',$tpn)) { // start with digit, +, (, [ or {
$fpn = preg_replace($ignrxp, $ignrpl, $tpn); // replace everything but digits/+ with '' $fpn = preg_replace($ignrxp, $ignrpl, $tpn); // replace everything but digits/+ with ''
$xpn = preg_replace($lpnrxp, $lpnrpl, $fpn); // replace local prenumbers $xpn = preg_replace(PhoneNumberFormatter::$localPrePhoneNumber_rxp, $lpnrpl, $fpn); // replace local prenumbers
$ypn = preg_replace(PhoneNumberFormatter::$intlPhoneNumber_rxp, '+$2', $xpn); // format to international coding +x[x[x]]..... $ypn = preg_replace(PhoneNumberFormatter::$intlPhoneNumber_rxp, '+$2', $xpn); // format to international coding +x[x[x]].....
} else { } else {
$ypn = $tpn; // some SMS_adresses are strings $ypn = $tpn; // some SMS_adresses are strings
} }
return $ypn; return $ypn;