123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
- /**
- * @file
- * CCK Field for Australia phone numbers.
- */
- /**
- * Patterns generated from Telecommunications Numbering Plan 1997
- * http://www.comlaw.gov.au/comlaw/management.nsf/lookupindexpagesbyid/IP200506356?OpenDocument
- */
- function _cck_phone_au_number_patterns() {
- $valid_patterns = array(
- // Geographic numbers (10 digits) - Central East Region (NSW, ACT, Northern VIC).
- '/^02[4,6-9][0-9]{7}$/',
- '/^023[3,8][0-9]{6}$/',
- '/^025[0-3,5-9][0-9]{6}$/',
- // Geographic numbers (10 digits) - South East Region (TAS, Southern NSW, VIC).
- '/^03[5,7-9][0-9]{7}$/',
- '/^034[0-5,7-9][0-9]{6}$/',
- '/^036[1-5,7][0-9]{6}$/',
- // Geographic numbers (10 digits) - North East Region (QLD).
- '/^07[2-4][0-9]{7}$/',
- '/^075[2-7][0-9]{6}$/',
- '/^0776[0-9]{6}$/',
- // Geographic numbers (10 digits) - Central and West Region (WA, SA, NT and Western NSW).
- '/^08[7-9][0-9]{7}$/',
- '/^085[1-4][0-9]{6}$/',
- '/^086[0-8][0-9]{6}$/',
- // Mobile numbers (10 digits).
- '/^04[0-9]{8}$/',
- // Local rate special numbers (10 digits).
- '/^130[0-9]{7}$/',
- // Local rate special numbers (6 digits).
- '/^13[1-3,5-9][0-9]{3}$/',
- '/^134[0-4,6-9][0-9]{2}$/',
- // Free phone numbers (10 digits).
- '/^180[0-1][0-9]{6}$/',
- // Satelite telephone numbers (10 digits).
- '/^014[1-3,5,7][0-9]{6}$/',
- // Satelite telephone numbers (9 digits).
- '/^014[0,4,6,8-9][0-9]{5}$/',
- '/^015[0-9]{6}$/',
- '/^017[1,2,8,9][0-9]{5}$/',
- '/^018[0-9]{6}$/',
- );
- $invalid_patterns = array(
- // Invalid geographic phone numbers.
- '/^0[2,3,7]5550[0-9]{4}$/',
- );
- $format_search_patterns = array(
- // Geographic numbers (10 digits).
- '/^(0)([2,3,7,8])([0-9]{4})([0-9]{4})$/',
- // Mobile numbers (10 digits).
- '/^(0)(4[0-9]{2})([0-9]{3})([0-9]{3})$/',
- // 1300 numbers, 1800 numbers (10 digits).
- '/^(1[3,8][0-9]{2})([0-9]{3})([0-9]{3})$/',
- // 13 numbers (6 digits).
- '/^(13)([0-9]{2})([0-9]{2})$/',
- // Satelite telephone numbers (10 digits).
- '/^(0)(14)([0-9])([0-9]{3})([0-9]{3})$/',
- // Satelite telephone numbers (9 digits).
- '/^(0)(1[4,5,7,8])([0-9]{3})([0-9]{3})$/',
- );
- $format_replace_patterns = array(
- // Geographic numbers (10 digits).
- '($1$2) $3 $4',
- // Mobile numbers (10 digits).
- '$1$2 $3 $4',
- // 1300 numbers, 1800 numbers (10 digits).
- '$1 $2 $3',
- // 13 numbers (6 digits).
- '$1 $2 $3',
- // Satelite telephone numbers (10 digits).
- '$1$2 $3 $4 $5',
- // Satelite telephone numbers (9 digits).
- '$1$2 $3 $4',
- );
- $format_replace_patterns_international = array(
- // Geographic numbers (10 digits).
- '$2 $3 $4',
- // Mobile numbers (10 digits).
- '$2 $3 $4',
- // 1300 numbers, 1800 numbers (10 digits).
- '$1 $2 $3',
- // 13 numbers (6 digits).
- '$1 $2 $3',
- // Satelite telephone numbers (10 digits).
- '$2 $3 $4 $5',
- // Satelite telephone numbers (9 digits).
- '$2 $3 $4',
- );
- return array($valid_patterns, $invalid_patterns, $format_search_patterns, $format_replace_patterns, $format_replace_patterns_international);
- }
- /**
- * Verifies that $number is a valid Australian phone number.
- */
- function au_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);
- if (empty($number)) {
- return TRUE;
- }
- list($valid_patterns, $invalid_patterns, $format_search_patterns, $format_replace_patterns, $format_replace_patterns_international) = _cck_phone_au_number_patterns();
- $invalid_number = preg_replace($invalid_patterns, '', $number);
- $correct_number = preg_replace($valid_patterns, '', $number);
- if (empty($invalid_number)) {
- $error = 'The phone number you have entered is classified as unusable by the Australian telecommunications authority.';
- return FALSE;
- }
- elseif (!empty($correct_number)) {
- $error = 'You have not entered a valid australian phone number. Please enter a 10 digit phone number including the area code, but not including the 61 international prefix. Valid 1800, 1300, and 13 numbers are accepted, as are satilite and AMPS numbers.';
- return FALSE;
- }
- return TRUE;
- }
- /**
- * Default formatter for Australian phone number.
- */
- function au_formatter_default($element) {
- // Display a global phone number with country code.
- $cc = cck_phone_countrycodes($element['country_codes']);
- list($valid_patterns, $invalid_patterns, $format_search_patterns, $format_replace_patterns, $format_replace_patterns_international) = _cck_phone_au_number_patterns();
- return $cc['code'] .' '. preg_replace($format_search_patterns, $format_replace_patterns_international, $element['number']);
- }
- /**
- * Local formatter for local Australian phone number.
- */
- function au_formatter_local($element) {
- list($valid_patterns, $invalid_patterns, $format_search_patterns, $format_replace_patterns, $format_replace_patterns_international) = _cck_phone_au_number_patterns();
- return preg_replace($format_search_patterns, $format_replace_patterns, $element['number']);
- }
|