phone.my.inc in Phone Number 6
Same filename and directory in other branches
CCK Field for Malaysia phone numbers.
File
includes/phone.my.incView source
<?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) {
$item = $element['#item'];
// Display a global phone number with country code.
$cc = cck_phone_countrycodes($item['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, $item['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 . $ext;
}
/**
* 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['#item']['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;
}
Functions
Name![]() |
Description |
---|---|
my_formatter_default | Default formatter for international phone number. |
my_formatter_local | Local formatter for local phone number. |
my_sanitize_number | Cleanup user-entered values for a phone number field for saving to DB. |
my_validate_number | Verifies that $number is a valid Malaysia phone number. |
_my_phone_rules | @file CCK Field for Malaysia phone numbers. |