phone.us.inc in Phone Number 7
Same filename and directory in other branches
CCK Field for North American phone numbers.
File
includes/phone.us.incView source
<?php
/**
* @file
* CCK Field for North American phone numbers.
*/
/**
* Verifies that $number is a valid ten-digit North American 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 us_validate_number($number, $ext = '', &$error) {
// Don't need to check for extension because it has been checked by generic validation as all digits, unless has special format/requirements
// We don't want to worry about separators
$number = cck_phone_clean_number($number);
// define regular expression
$regex = '/^
([1]*) # an optional 1
[2-9][0-8]\\d # area code (Allowed range of [2-9] for the first digit, [0-8] for the second, and [0-9] for the third digit)
[2-9]\\d{2} # 3-digit prefix (cannot start with 0 or 1)
\\d{4} # 4-digit line number
$/x';
$result = preg_match($regex, $number, $matches);
if ($result && $matches[1] == '') {
return TRUE;
}
elseif ($result && $matches[1] == '1') {
// t() is no needed
$error = 'Please enter a 10 digit North American phone number like "999 999 9999", without the country code "1" or "+1"';
return FALSE;
}
else {
// t() is no needed
$error = '"%phone_input" is not a valid North American phone number, it should be a 10 digit number like "999 999 9999"';
return FALSE;
}
}
/**
* Cleanup user-entered values for a phone number field for saving to DB.
*
* @param $number
* A single phone number item.
*/
function us_sanitize_number(&$number) {
// Remove prefix '1'
$number = preg_replace('/^([1]*)/', '', $number);
}
/**
* Default formatter for international phone number.
*
* @param $element
* $element['country_codes']: alpha-2 country code
* $element['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 us_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
// define regular expression
$regex = '/^
([2-9][0-8]\\d) # area code (Allowed range of [2-9] for the first digit, [0-8] for the second, and [0-9] for the third digit)
([2-9]\\d{2}) # 3-digit prefix (cannot start with 0 or 1)
(\\d{4}) # 4-digit line number
/x';
$result = preg_match($regex, $element['number'], $matches);
if ($result) {
// output as +1 (AAA) BBB-CCCC
$phone = $cc['code'] . ' (' . $matches[1] . ') ' . $matches[2] . '-' . $matches[3];
}
return $phone;
}
/**
* Local formatter for local phone number.
*
* @param $element
* $element['country_codes']: alpha-2 country code
* $element['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 us_formatter_local($element) {
$phone = '';
// Display a local phone number without country code.
$regex = '/^
([2-9][0-8]\\d) # area code (Allowed range of [2-9] for the first digit, [0-8] for the second, and [0-9] for the third digit)
([2-9]\\d{2}) # 3-digit prefix (cannot start with 0 or 1)
(\\d{4}) # 4-digit line number
/x';
$result = preg_match($regex, $element['number'], $matches);
if ($result) {
// output as (AAA) BBB CCCC
$phone = '(' . $matches[1] . ') ' . $matches[2] . '-' . $matches[3];
}
return $phone;
}
Functions
Name![]() |
Description |
---|---|
us_formatter_default | Default formatter for international phone number. |
us_formatter_local | Local formatter for local phone number. |
us_sanitize_number | Cleanup user-entered values for a phone number field for saving to DB. |
us_validate_number | Verifies that $number is a valid ten-digit North American phone number. |