Fractionner et append de l’espace entre les numéros de téléphone

J’essaie de formater un numéro de téléphone dans un format plus net qui ajoute un espace entre chaque troisième et septième caractère de l’avant.

var ssortingng = "02076861111" var phone = [ssortingng.slice(0, 3), " ", ssortingng.slice(3)].join(''); console.log(phone); // returns 020 76861111 

Où dois-je placer la méthode pour le septième caractère afin que 020 7686 1111 soit renvoyé?

Toute aide est appréciée. Merci d’avance!

En un seul remplacement:

 var ssortingng = "02076861111" var phone = ssortingng.replace(/(\d{3})(\d{4})(\d{4})/, '$1 $2 $3'); console.log(phone); 

Bien sûr, cela suppose que vous avez toujours une chaîne parfaite (sans espace, trait d’union ou autres caractères, 10 caractères …)

Une expression rationnelle plus ssortingcte pourrait ressembler à ceci:

 var phone = ssortingng.replace(/\D*(\d{3})\D*(\d{4})\D*(\d{4})\D*/, '$1 $2 $3'); 

Mais cela n’empêcherait pas toutes les possibilités.

Il suffit de trancher à nouveau:

 var phone = [ssortingng.slice(0, 3), " ", ssortingng.slice(3,7), " ", ssortingng.slice(7)].join(''); 

Slice prend un index de début et de fin (exclusif). Notez que si l’index de fin est manquant, le rest de la chaîne sera pris.

Ainsi, la première tranche prend les index 0 à 2, la seconde prend les index 3 à 6 et la dernière tranche prend l’index 7 à la fin de la chaîne.

Pourquoi utiliser slice, quand une expression régulière peut fonctionner

 "02076861111".replace(/(\d{3})\D?(\d{4})\D?(\d{4})/,"$1 $2 $3"); 

et cela ne va pas exploser si l’utilisateur entre dans des espaces pour commencer.

 "02076861111".replace(/^\d{3}-\d{8}$/); 

SORTIE: 020-76861111