123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <?php
- /**
- * @file
- * CCK Field for Philippine phone numbers.
- */
- function phone_ph_metadata() {
- // These strings are translated using t() on output.
- return array(
- 'error' => '"%value" is not a valid Philippine phone number<br />Example of valid Philippine phone numbers: +63 (2) 123-4567 or +63 (2) 123-4567 loc. 123 or mobile +63 (919) 123-4567',
- );
- }
- /**
- * Verifies that $phonenumber is a valid ten-digit Philippine phone number
- *
- * @param string $phonenumber
- * @return boolean Returns boolean FALSE if the phone number is not valid.
- */
- function valid_ph_phone_number($phonenumber) {
- /*
- Accepts:
- +63197071234567
- +63197071234567
- +63(19707) 1234567
- +63(19707) 123-4567
- +63 19707 123 4567
- +63 19707 123-4567
- (19707) 1234567 loc. 1234
- */
- $regex = "/
- (
- (^\+63\s?\(?\d{5}\)?|^\(?\d{5}\)?){1}\s?\d{3}(\S?|\s?)?\d{4} # 5 digit area code with optional +63 internationalisation or not, optional spaces and brackets.
- |
- (^\+63\s?\(?\d{4}\)?|^\(?\d{4}\)?){1}\s?\d{3}(\S?|\s?)?\d{4} # 4 digit area code with optional +63 internationalisation or not, optional spaces and brackets.
- |
- (^\+63\s?\(?\d{3}\)?|^\(?\d{3}\)?){1}\s?\d{3}(\S?|\s?)?\d{4} # 3 digit area code with optional +63 internationalisation or not, optional spaces and brackets.
- |
- (^\+63\s?\(?\d{2}\)?|^\(?\d{2}\)?){1}\s?\d{3}(\S?|\s?)?\d{4} # 2 digit area code with optional +63 internationalisation or not, optional spaces and brackets.
- |
- (^\+63\s?\(?\d{1}\)?|^\(?\d{1}\)?){1}\s?\d{3}(\S?|\s?)?\d{4} # 1 digit area code with optional +63 internationalisation or not, optional spaces and brackets.
- )
- (\s?\#\d*)? # optional extension number shown with a loc. divider
- /x";
- // return true if valid, false otherwise
- if (!preg_match($regex, $phonenumber)) {
- return FALSE;
- }
- else
- {
- return TRUE;
- }
- }
- /**
- * Convert a valid Philippine phone number into standard +63 (2) 123-4567 or +63 (2) 123-4567 loc. 123 or mobile +63 (919) 123-4567
- *
- * @param $phonenumber must be a valid ten-digit number (with optional extension)
- *
- */
- function format_ph_phone_number($phonenumber, $field = FALSE) {
- $area = $number = $extension = $description = '';
- //Simplify to 10 digit number and clean up ready for international reformat.
- $phonenumber = preg_replace("/^\+63/","",$phonenumber);
- $phonenumber = preg_replace("/\(/","",$phonenumber);
- $phonenumber = preg_replace("/\)/","",$phonenumber);
- //If there are some spaces in the number assume some level of preformatting
- $regex = "/
- # 5 digit area code.
- (
- (\d{5}) # capture 5 digit area code
- (\s*)? # ignore required separator to make a distinction with other area codes
- (\d{3}) # capture first set of numbers in the local number
- (\S?|\s*)? # ignore optional separator
- (\d{4}) # capture second set of numbers in the local number
- |
- # 4 digit area code.
- (\d{4}) # capture 4 digit area code
- (\s*)? # ignore required seperator
- (\d{3}) # capture first set of numbers in the local number
- (\S?|\s*)? # ignore possible boundary
- (\d{4}) # capture second set of numbers in the local number
- |
- # 3 digit area code.
- (\d{3}) # capture 3 digit area code
- (\s*)? # ignore required seperator
- (\d{3}) # capture first set of numbers in the local number
- (\S?|\s*)? # ignore possible boundary
- (\d{4}) # capture second set of numbers in the local number
- |
- # 2 digit area code.
- (\d{2}) # capture 2 digit area code
- (\s*)? # ignore required seperator
- (\d{3}) # capture first set of numbers in the local number
- (\S?|\s*)? # ignore possible boundary
- (\d{4}) # capture second set of numbers in the local number
- |
- # 1 digit area code.
- (\d{1}) # capture 1 digit area code
- (\s*)? # ignore required boundary to make a distinction with other area codes
- (\d{3}) # capture first set of numbers in the local number
- (\S?|\s*)? # ignore possible boundary
- (\d{4}) # capture second set of numbers in the local number
- )
- # capture the optional extension number
- (\s*loc\.\s*|\s*ext\.\s*)?
- (\d*)?
- ([a-zA-Z0-9\-\. \/\,\']{0,})?
- /x";
- preg_match($regex, $phonenumber, $matches);
- $area = $matches[2] . $matches[7] . $matches[12] . $matches[17] . $matches[22];
- $number = $matches[4] . $matches[9] . $matches[14] . $matches[19] . $matches[24] . '-' . $matches[6] . $matches[11] . $matches[16] . $matches[21] . $matches[26];
- $extension = $matches[28];
- $description = $matches[29];
- $phonenumber = '+63 (' . $area . ') ' . $number;
- $phonenumber .= (empty($extension)) ? '' : " loc. $extension";
- $phonenumber .= (empty($description))? '' : " $description";
- return $phonenumber;
- }
|