2011-05-18 14 views
5

¿Cómo se agregan caracteres en medio de una cadena?PHP - agregar caracteres en medio de una cadena (comenzando desde el final)

Estoy tratando de formatear un número estadounidense como 2121231234 en uno con guiones como el siguiente: 212-123-1234.

No sé de antemano cuánto tiempo será la cadena de números,
Podría ser 12121231234, que incluso podría ser 0012121231234,
en cuyo caso, quiero que se convierta en 1212-123-1234, y 001212-123-1234, respectivamente.

Hasta ahora, esto es lo que he llegado con:

$phone_number = '2121231234'; 
$phone_number = str_split($phone_number); // [2,1,2,1,2,3,1,2,3,4] 
$phone_number = array_reverse($phone_number); // [4,3,2,1,3,2,1,2,1,2] 

array_splice($phone_number, 4, 0, '-'); // [4,3,2,1,-,3,2,1,2,1,2] 
array_splice($phone_number, 8, 0, '-'); // [4,3,2,1,-,3,2,1,-,2,1,2] 

$phone_number = array_reverse($phone_number); // [2,1,2,-,1,2,3,-,1,2,3,4] 
$phone_number = implode($phone_number); // "212-123-1234" 

que funciona, pero parece ser demasiado para realizar una tarea tan sencilla.

¿Qué me estoy perdiendo?

Respuesta

7

intentarlo con regular expressions:

echo preg_replace('/^(.*?)(.{3})(.{4})$/', '$1-$2-$3', $telnum); 
+0

Grande, la solución más elegante. –

0

Al igual que

$phone_number = substr_replace($phone_number, '-' , strlen($phone_number)-7 , 0); 
$phone_number = substr_replace($phone_number, '-' , strlen($phone_number)-4 , 0); 
2

Pruébalo

$phone_number = "2121231234"; 
$phone_number = substr($phone_number, 0, 3) . '-' . substr($phone_number, 3, 6) . ' - '. 
substr($phone_number, 6, strlen($phone_number)); 
Cuestiones relacionadas