| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 | <?php/** * @file * CCK Field for Malaysia phone numbers. */function _my_phone_rules() {  $rules = array();  // rule: 'area code, min length, max length'  // Geographic land line number  $rules[] = array("2", 7);    // Domestic access code to Singapore  $rules[] = array("3", 8);    // Selangor & Federal Territories of Kuala Lumpur & Putrajaya  $rules[] = array("4", 7);    // Kedah, Penang & Perlis  $rules[] = array("5", 7);    // Perak & Cameron Highlands (Pahang)  $rules[] = array("6", 7);    // Melaka, Negeri Sembilan & Muar (Johor)  $rules[] = array("7", 7);    // Johor (except Muar)  $rules[] = array("80", 6);   // Domestic access code to Brunei (East Malaysia only)//  $rules[] = array("81", 6);    // reserved  $rules[] = array("82", 6);   // Kuching (Sarawak)  $rules[] = array("83", 6);   // Sri Aman (Sarawak)  $rules[] = array("84", 6);   // Sarikei, Bintangor, Sibu, Kanowit, Song, & Kapit (Sarawak)  $rules[] = array("85", 6);   // Lawas, Limbang, Miri (Sarawak)  $rules[] = array("86", 6);   // Bintulu, Belaga (Sarawak)  $rules[] = array("87", 6);   // Inner District (Sabah) & Federal Territory of Labuan  $rules[] = array("88", 6);   // Kota Kinabalu, Kudat (Sabah)  $rules[] = array("89", 6);   // Lahad Datu, Sandakan, Tawau (Sabah)  $rules[] = array("9", 7);    // Kelantan, Pahang (except Cameron Highlands) & Terengganu  // Mobile number structure  $rules[] = array("10", 7);  $rules[] = array("11", 7);  $rules[] = array("12", 7);  $rules[] = array("13", 7);  $rules[] = array("14", 7);  $rules[] = array("15", 7);  $rules[] = array("16", 7);  $rules[] = array("17", 7);  $rules[] = array("18", 7);  $rules[] = array("19", 7);  return $rules;}/** * Verifies that $number is a valid Malaysia phone number. * * @param $number *   Digits only value. * @param $ext *   Digits only value. * @param $error *   The error message to shown to user. *   Available parameters to use in the error message are *   - "%countrycode": the alpha-2 CC *   - "%phone_input": the original number input by user (could be invalid) *   - "%max_length": allowed maximum length of the phone number * @return boolean *   TRUE if it is a valid phone number for that country, FALSE otherwise. */function my_validate_number($number, $ext = '', &$error) {  // We don't want to worry about separators  $number = cck_phone_clean_number($number);  foreach (_my_phone_rules() as $rule) {    // define regular expression    $regex = '/^      ([0]*)                             # an optional 0      (' . $rule[0] . ')                   # area code      \d{' . $rule[1] . '}                 # local number within length $rule[1] & $rule[2]      $/x';    $result = preg_match($regex, $number, $matches);    if ($result) {      return TRUE;    }  }  // t() is no needed  $error = '"%phone_input" is not a valid Malaysia phone number, it should be a 9-10 digit number like "03-2222 2222", "0" is optional and will be removed.';  return FALSE;}/** * Cleanup user-entered values for a phone number field for saving to DB. * * @param $number *   A single phone number item. */function my_sanitize_number(&$number) {  // Remove trunk prefix '0'  $number = preg_replace('/^([0]*)/', '', $number);}/** * Default formatter for international phone number. * * @param $element *   $element['#item']['country_codes']: alpha-2 country code *   $element['#item']['number']: phone number * @param $error *   The error message to shown to user. *   Available parameters to use in the error message are *   - "%countrycode": the alpha-2 CC *   - "%phone_input": the original number input by user (could be invalid) *   - "%max_length": allowed maximum length of the phone number * @return boolean *   TRUE if it is a valid phone number for that country, FALSE otherwise. */function my_formatter_default($element) {  $phone = '';  // Display a global phone number with country code.  $cc = cck_phone_countrycodes($element['country_codes']);  // Format the phone number however you like, this is the default  foreach (_my_phone_rules() as $rule) {    // define regular expression    $regex = '/^      (' . $rule[0] . ')                   # area code      (\d{3,4})      (\d{4})      $/x';    $result = preg_match($regex, $element['number'], $matches);    if ($result) {      // output as +60A-BBB CCCC or +60A-BBBB CCCC      $phone =  $cc['code'] . $matches[1] . '-' . $matches[2] . ' ' . $matches[3];      continue;    }  }  return $phone;}/** * Local formatter for local phone number. * * @param $element *   $element['#item']['country_codes']: alpha-2 country code *   $element['#item']['number']: phone number * @param $error *   The error message to shown to user. *   Available parameters to use in the error message are *   - "%countrycode": the alpha-2 CC *   - "%phone_input": the original number input by user (could be invalid) *   - "%max_length": allowed maximum length of the phone number * @return boolean *   TRUE if it is a valid phone number for that country, FALSE otherwise. */function my_formatter_local($element) {  // Display a local phone number without country code.  $phone = $element['number'];  foreach (_my_phone_rules() as $rule) {    // define regular expression    $regex = '/^      (' . $rule[0] . ')                   # area code      (\d{3,4})      (\d{4})      $/x';    $result = preg_match($regex, $phone, $matches);    if ($result) {      // output as 0A-BBB CCCC or 0A-BBBB CCCC      $phone = '0' . $matches[1] . '-' . $matches[2] . ' ' . $matches[3];      continue;    }  }  return $phone;}
 |