diff --git a/lib/phonenumberformatter.php b/lib/phonenumberformatter.php index f0cd54f..90500dc 100644 --- a/lib/phonenumberformatter.php +++ b/lib/phonenumberformatter.php @@ -16,28 +16,32 @@ use \OCA\OcSms\Lib\CountryCodes; class PhoneNumberFormatter { public static $intlPhoneNumber_rxp = array( // match international numbers with 1,2,3 digits - '#^(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[0|7])#', // +2x - '#^(00|\+)(3[5|7|8]\d)#', // +3(5|7|8)x - '#^(00|\+)(3[0|1|2|3|4|6|9])#', // +3x - '#^(00|\+)(4[2]\d)#', // +4(2)x - '#^(00|\+)(4[0|1|3|4|5|6|7|8|9])#', // +4x - '#^(00|\+)(5[0|9]\d)#', // +5(0|9)x - '#^(00|\+)(5[1|2|3|4|5|6|7|8])#', // +5x - '#^(00|\+)(6[7|8|9]\d)#', // +6(7|8|9)x - '#^(00|\+)(6[0|1|2|3|4|5|6])#', // +6x - '#^(00|\+)(7)#', // +7 - '#^(00|\+)(8[5|7|8|9]\d)#', // +8(5|7|8|9)x - '#^(00|\+)(8[1|2|3|4|6])#', // +8x - '#^(00|\+)(9[6|7|9]\d)#', // +9(6|7|9)x - '#^(00|\+)(9[0|1|2|3|4|5|8])#' // +9x + '#^(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[0|7])#', // +2x + '#^(00|\+)(3[5|7|8]\d)#', // +3(5|7|8)x + '#^(00|\+)(3[0|1|2|3|4|6|9])#', // +3x + '#^(00|\+)(4[2]\d)#', // +4(2)x + '#^(00|\+)(4[0|1|3|4|5|6|7|8|9])#', // +4x + '#^(00|\+)(5[0|9]\d)#', // +5(0|9)x + '#^(00|\+)(5[1|2|3|4|5|6|7|8])#', // +5x + '#^(00|\+)(6[7|8|9]\d)#', // +6(7|8|9)x + '#^(00|\+)(6[0|1|2|3|4|5|6])#', // +6x + '#^(00|\+)(7)#', // +7 + '#^(00|\+)(8[5|7|8|9]\d)#', // +8(5|7|8|9)x + '#^(00|\+)(8[1|2|3|4|6])#', // +8x + '#^(00|\+)(9[6|7|9]\d)#', // +9(6|7|9)x + '#^(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) { - // 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)) { - return $pn; + return trim($pn); } $ignrxp = array( // match non digits and + @@ -52,22 +56,16 @@ class PhoneNumberFormatter { '' ); - /* - @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 - $lpnrpl = '+'.CountryCodes::$codes[$country].'$2'; // replace with +{countryCode} -xx[x[x]]-123456 $tpn = trim($pn); - if (preg_match('#^[\d\+\(\[\{].*#',$tpn)) { // start with digit, +, (, [ or { - $fpn = preg_replace($ignrxp, $ignrpl, $tpn); // replace everything but digits/+ with '' - $xpn = preg_replace($lpnrxp, $lpnrpl, $fpn); // replace local prenumbers - $ypn = preg_replace(PhoneNumberFormatter::$intlPhoneNumber_rxp, '+$2', $xpn); // format to international coding +x[x[x]]..... + if (preg_match('#^[\d\+\(\[\{].*#',$tpn)) { // start with digit, +, (, [ or { + $fpn = preg_replace($ignrxp, $ignrpl, $tpn); // replace everything but digits/+ with '' + $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]]..... } else { - $ypn = $tpn; // some SMS_adresses are strings + $ypn = $tpn; // some SMS_adresses are strings } return $ypn;