Format phone number
By: Daniel

Have you ever needed to format a phone number in a particular way? The following code will format into the USA standard phone numbers and has the option to convert letters into their number form.

<?php
function formatPhone($phone = '', $convert = false, $trim = true)
{
	// If we have not entered a phone number just return empty
	if (empty($phone)) {
		return '';
	}
	
	// Strip out any extra characters that we do not need only keep letters and numbers
	$phone = preg_replace("/[^0-9A-Za-z]/", "", $phone);
	
	// Do we want to convert phone numbers with letters to their number equivalent?
	// Samples are: 1-800-TERMINIX, 1-800-FLOWERS, 1-800-Petmeds
	if ($convert == true) {
		$replace = array('2'=>array('a','b','c'),
									   '3'=>array('d','e','f'),
										 '4'=>array('g','h','i'),
										 '5'=>array('j','k','l'),
										 '6'=>array('m','n','o'),
										 '7'=>array('p','q','r','s'),
										 '8'=>array('t','u','v'),
										 '9'=>array('w','x','y','z'));
		
		// Replace each letter with a number
		// Notice this is case insensitive with the str_ireplace instead of str_replace 
		foreach($replace as $digit=>$letters) {
			$phone = str_ireplace($letters, $digit, $phone);
		}
	}
	
	// If we have a number longer than 11 digits cut the string down to only 11
	// This is also only ran if we want to limit only to 11 characters
	if ($trim == true && strlen($phone)>11) {
		$phone = substr($phone, 0, 11);
	}						 
	
	// Perform phone number formatting here
	if (strlen($phone) == 7) {
		return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1-$2", $phone);
	} elseif (strlen($phone) == 10) {
		return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "($1) $2-$3", $phone);
	} elseif (strlen($phone) == 11) {
		return preg_replace("/([0-9a-zA-Z]{1})([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1($2) $3-$4", $phone);
	}
	
	// Return original phone if not 7, 10 or 11 digits long
	return $phone;
}
?>

To use the code:

<?php
$phone = '1-800-FLOWERS';
echo formatPhone($phone, true); // Returns 1(800) 356-9377

$newPhone = formatPhone($phone);
echo $newPhone; // Returns 1(800) FLO-WERS
?>
1 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 51 Votes | Average: 5 out of 5 (1 votes, average: 5 out of 5)
Loading ... Loading ...
del.icio.us:Format phone number digg:Format phone number spurl:Format phone number wists:Format phone number simpy:Format phone number newsvine:Format phone number blinklist:Format phone number furl:Format phone number reddit:Format phone number fark:Format phone number blogmarks:Format phone number Y!:Format phone number smarking:Format phone number magnolia:Format phone number segnalo:Format phone number

Leave a Reply

eXTReMe Tracker
geovisitors