| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | 
							- <?php
 
- /**
 
-  * @file
 
-  * CCK Field for British phone numbers.
 
-  */
 
- function phone_gb_metadata() {
 
-   // These strings are translated using t() on output.
 
-   return array(
 
-     'error' => '"%value" is not a valid British (UK) phone number<br>British Phone numbers should .... ',
 
-   );
 
- }
 
- /**
 
-  * Verifies that $phonenumber is a valid eleven-digit United Kingdom phone number
 
-  *
 
-  * Regular expression adapted from Amos Hurd's regex at RegExLib.com
 
-  *
 
-  * @param string $phonenumber
 
-  * @return boolean Returns boolean FALSE if the phone number is not valid.
 
-  */
 
- function valid_gb_phone_number($phonenumber) {
 
-   /*
 
-     Accepts:
 
-         +441970123456
 
-         +44(0)1970123456
 
-         +44 1970 123 456
 
-         +44 (0)1970 123 456
 
-         (01970) 123456 #0001
 
-     Rejects:
 
-         (+441970)123456
 
-         +44(1970)123456
 
-         +44 01970 123 456
 
-         (0197) 0123456 #01
 
-   */
 
-   $regex = "/
 
-     (
 
-         (^\+44\s?(\(0\))?\d{4}|^\(?0\d{4}\)?){1}\s?\d{3}\s?\d{3}  # 4 digit area code with optional +44 internationalisation or not, optional spaces and brackets.
 
-         |
 
-         (^\+44\s?(\(0\))?\d{3}|^\(?0\d{3}\)?){1}\s?\d{3}\s?\d{4}  # 3 digit area code with optional +44 internationalisation or not, optional spaces and brackets.
 
-         |
 
-         (^\+44\s?(\(0\))?\d{2}|^\(?0\d{2}\)?){1}\s?\d{4}\s?\d{4}  # 2 digit area code with optional +44 internationalisation or not, optional spaces and brackets.
 
-         |
 
-         (^\+44\s?(\(0\))?\d{1}|^\(?0\d{1}\)?){1}\s?\d{5}\s?\d{5}  # 1 digit area code with optional +44 internationalisation or not, optional spaces and brackets.        
 
-     )
 
-     (\s?\#\d*)?   # optional extension number shown with a hash divider
 
-   /x";
 
-   if (!preg_match($regex, $phonenumber)) {
 
-   	return FALSE;
 
-   }
 
-   else
 
-   {
 
- 	return TRUE;
 
-   }
 
- }
 
- /**
 
-  * Convert a valid United Kingdom phone number into standard +44 (0)1970 123 456 #001 international format
 
-  *
 
-  * @param $phonenumber must be a valid eleven-digit number (with optional extension)
 
-  *
 
-  */
 
- function format_gb_phone_number($phonenumber, $field = FALSE) {
 
-     $area = $number = $extension = '';
 
-     //If we already have the formatting we want just return
 
-     if (preg_match(
 
-     "/
 
-         (
 
-             \+44\s\(0\)\d{4}\s\d{3}\s\d{3}  # 4 digit area code
 
-             |
 
-             \+44\s\(0\)\d{3}\s\d{3}\s\d{4}  # 3 digit area code
 
-             |
 
-             \+44\s\(0\)\d{2}\s\d{4}\s\d{4}  # 2 digit area code
 
-         )
 
-         (\s\#\d*)?
 
-     /",$phonenumber)) {
 
-         return $phonenumber;
 
-     }
 
-     else {
 
-         //Simplify to 10 digit number and clean up ready for international reformat.
 
-         $phonenumber = preg_replace("/^(\+44)?\s?(\(?0\)?)?/","",$phonenumber);
 
-         $phonenumber = preg_replace("/\(/","",$phonenumber);
 
-         $phonenumber = preg_replace("/\(0/","",$phonenumber);
 
-         $phonenumber = preg_replace("/\)/","",$phonenumber);
 
-         //If there are some spaces in the number assume some level of preformatting
 
-         if(preg_match("/ /",$phonenumber)) {
 
-             $regex = "/
 
-                 # 4 digit area code.
 
-                 (
 
-                     (\d{4}) # capture 4 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*     # ignore optional separator
 
-                     (\d{3}) # 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*     # 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 boundary to make a distinction with other area codes
 
-                     (\d{4}) # capture first set of numbers in the local number
 
-                     \s*     # ignore possible boundary
 
-                     (\d{4}) # capture second set of numbers in the local number
 
-                 )
 
-                 # capture the optional extension number
 
-                 (\s*\#)?
 
-                 (\d{4}|\d{3})?
 
-             /x";
 
-             preg_match($regex, $phonenumber, $matches);
 
-             $area = $matches[2].$matches[5].$matches[8];
 
-             $number = $matches[3].$matches[6].$matches[9].' '.$matches[4].$matches[7].$matches[10];
 
-             $extension = $matches[12];
 
-         }
 
-         //If there are no spaces in the number assume 4 digit area code.
 
-         else {
 
-             preg_match("/(\d{4})(\d{3})(\d{3})\#?(\d*)?/",$phonenumber, $matches);
 
-             $area = $matches[1];
 
-             $number = $matches[2].' '.$matches[3];
 
-             $extension = $matches[4];
 
-         }
 
- 	
 
-       if ($field['phone_country_code']) {	
 
-       	$phonenumber = '+44 (0)'.$area.' '.$number;
 
-       }
 
-       else {
 
-       	$phonenumber = '0'.$area.' '.$number;
 
-       }
 
-       $phonenumber .= (empty($extension))?'':" #$extension";
 
-   }
 
-   return $phonenumber;
 
- }
 
 
  |