| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | 
							- <?php
 
- /* 2009/10/24, Ahmad Gharbeia: initial release
 
-   General phone number format is +20 (#[#]) #######[#]
 
-   currently (10/2009) only Greater Cairo (including all of Giza) has 8 digits:
 
- Regional area codes:
 
- ??????? ??????		2
 
- ??????????			3
 
- ?????????			13
 
- ?????? ?? ?????	15
 
- ???????				4
 
- ???????				45
 
- ?????					46
 
- ????????				47
 
- ????????				48
 
- ????????				5
 
- ???????				55
 
- ?????					57
 
- ??????				62
 
- ???????????			64
 
- ???????				65
 
- ???????				66
 
- ??????				68
 
- ???? ?????			69
 
- ??? ????				82
 
- ??????				84
 
- ??????				86
 
- ?????					88
 
- ?????? ??????		92
 
- ?????					93
 
- ??????					95
 
- ???					96
 
- ?????					97
 
- mobile network operators' area codes:
 
- 	Mobinil: 12, 16
 
- 	Vodafone: 10, 19
 
- 	Etisalat: 11, 18
 
-   **/
 
- define('AREA_CODE_REGEX', "
 
- 		(
 
- 			 1(3|5)
 
- 			|3
 
- 			|4(5|6|7|8|)
 
- 			|5(5|7|)
 
- 			|6(2|4|5|6|8|9)
 
- 			|8(2|4|6|8)
 
- 			|9(2|3|5|6|7)
 
- 		)
 
- ");
 
- define('MOBILE_CODE_REGEX', "1(0|2|1|6|8|9)");		//area codes 10, 11, 12, 16, 18, or 19
 
- define('TELEPHONE_REGEX', "
 
- 	(\+20)\s																					# optional countrycode optionally followed by a space
 
- 		(
 
- 				\(2\)\s(2|3)\d{3}\s\d{4}								# 8-digit numbers begining with 2 or 3 (Greater Cairo: Cairo and Giza, both having area code = 2)
 
- 			|
 
- 				\(" . AREA_CODE_REGEX . "\)\s\d{3}\s\d{4}		# all other areas' numbers have 7 digits. Checks for correct area codes
 
- 			|
 
- 				\(" . MOBILE_CODE_REGEX . "\)\s\d{3}\s\d{4}		# mobile operators' networks' area codes; followed by 7 digits
 
- 		)
 
- 		(\s\#\s\d+)?																# optional extension number shown with a hash divider
 
- ");
 
- function phone_eg_metadata() {
 
-   // These strings are translated using t() on output.
 
-   return array(
 
-     'error' => '"%value" is not a valid phone number in Egypt. Telephone numbers in Egypt have the format +20 (#[#]) 1234567[8], where the digts between ( ) is the area or network code, without a leading zero; and digits between [ ] are optional',
 
-   );
 
- }#end function phone_eg_metadata;
 
- function valid_eg_phone_number($phonenumber) {
 
- /*
 
- 	accepts:
 
- 	properly formatted: [+20][ ][(]#[#][)][ ]1234[ ]567[#]
 
- 	common: [(][0#[#]][)][ ]123[ ]456[#]
 
- 	area code could be within paranthises and|or prefixed with 0
 
- */
 
-   $regex = "/^						# the same as the model regex above, but with elements made optional
 
- 		(\+20)?\s?																					# country code, with following space being optional
 
-    (
 
- 				(\(0?2\)|0?2)\s?(2|3)\d{3}\s?\d{4}				# Greater Cairo, with leading optional zeros and optional braces around the area code
 
- 			|
 
- 				(\(0?" . AREA_CODE_REGEX . "\)|0?" . AREA_CODE_REGEX . ")\s?\d{3}\s?\d{4}					# other areas, with optional leading zeros and braces
 
- 			|
 
- 				(\(0?" . MOBILE_CODE_REGEX . "\)|0?" . MOBILE_CODE_REGEX . ")\s?\d{3}\s?\d{4}		# mobiles, with optional leading zeros and braces
 
- 		)
 
- 		(\s?\#\s?\d+)?  									# extension
 
- 	$/x";
 
-   return (bool) preg_match($regex, $phonenumber);
 
- }#end function valid_eg_phone_number;
 
- function format_eg_phone_number($phonenumber, $field) {
 
- 	if (preg_match("/^" . TELEPHONE_REGEX . "$/x", $phonenumber)) {		//already in proper format
 
- 		return $phonenumber;
 
- 	}
 
- 	else {	//remove country code, zeros, and braces
 
- 		$phonenumber = preg_replace("/(^(\+20)?\s?|\(0?|\)|^0?)/", '', $phonenumber);
 
- 	}
 
- 	//If there are some spaces in the number assume some level of preformatting
 
-   if (preg_match("/ /", $phonenumber)) {
 
- 		$regex = "/^
 
-    	(
 
- 				(\d{1,2})					# area code
 
- 				\s*  						   # ignore required separator
 
- 				(\d{3,4})					# 4 digits in case of Greater Cairo
 
- 				\s*
 
- 				(\d{4})
 
- 			)
 
- 			((\s*\#)?(\d*))?  									# extension
 
- 		$/x";
 
- 		preg_match($regex, $phonenumber, $matches);
 
- 		$area = $matches[2];
 
- 		$number = $matches[3] . ' ' . $matches[4];
 
- 		$extension = $matches[7];
 
-   }
 
-   else {					//no spaces?, then apply some guessing
 
- 		$regex = "/^  # order is important in this one
 
- 			(
 
- 					(\d)(\d{4})(\d{4})				# 2 area code, followed by 8 digits begining with 2 or 3: Greater Cairo
 
- 				|
 
- 					(\d{1,2})(\d{3})(\d{4})				# 1 or 2-digit area code followed by 7 digits: regional or mobile
 
- 			)
 
- 			((\s*\#)?(\d*))?
 
- 		$/x";
 
- 		preg_match($regex, $phonenumber, $matches);
 
- 		$area = $matches[2];
 
- 		$number = $matches[3] . ' ' . $matches[4];
 
- 		$extension = $matches[5];
 
-   }
 
- 	return '+20 (' . $area . ') ' . $number . (empty($extension) ? '' : " #$extension");
 
- }#end function format_eg_phone_number;
 
 
  |