Comment formater un numéro de téléphone avec jQuery

93

J'affiche actuellement des numéros de téléphone comme 2124771000. Cependant, je dois le nombre à formater sous une forme plus lisible par l' homme, par exemple: 212-477-1000. Voici mon courant HTML:

<p class="phone">2124771000</p>
Xtian
la source
1
Réponse trop tardive, mais juste pour aider ceux qui atterrissent sur cette page URL: igorescobar.github.io/jQuery-Mask-Plugin
Senthil
5
Je ne suis pas sûr de comprendre le statut fermé sur celui-ci. Pas constructif ne semble pas juste ... Je trouve cette information extrêmement utile et une association directe avec le problème qui m'a amené ici. Je ne conteste pas le fait qu'il soit fermé, mais la raison affichée de sa fermeture
Brett Weber
Peut-être que la question a été modifiée et était moins descriptive avant ... cela me semble être une question et une réponse SO parfaitement valides, et beaucoup de votes positifs.
Kevin Nelson
1
Bibliothèque Googles github.com/googlei18n/libphonenumber aucun jQuery requis.
nu everest

Réponses:

217

Simple: http://jsfiddle.net/Xxk3F/3/

$('.phone').text(function(i, text) {
    return text.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
});

Ou: http://jsfiddle.net/Xxk3F/1/

$('.phone').text(function(i, text) {
    return text.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, '$1-$2-$3');
});

Remarque: La méthode .text () ne peut pas être utilisée sur les éléments d'entrée. Pour le texte du champ de saisie, utilisez la méthode .val ().

andlrc
la source
4
J'ai modifié cela pour prendre en charge les événements de «modification» dans les champs de saisie. jsfiddle.net/gUsUK
Zach Shallbetter
3
Un peu plus robuste d'une regex (bien qu'elle nécessite une fonction de remplacement personnalisée) serait /(\d{3})?(\d{3})(\d{4})$/au cas où il n'y aurait pas d'indicatif régional
RevanProdigalKnight
Est-ce valable pour les numéros de téléphone du monde entier?
RamPrasadBismil
Si vous avez plusieurs numéros de téléphone sur la page, envisagez d'utiliser la fonction $ (selector) .each () pour appliquer facilement ce masque à tous les numéros.
Daniel Siebert
Je veux l'implémenter avec une pression de touche et un événement de flou. Ce n'est pas le formatage du numéro de téléphone lorsque les chiffres sont inférieurs à 10. Exemple de code: $('#x_phone').on('keypress blur',function() { var ph = $(this).val(); var temp = ph.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); $(this).val(temp); //alert(temp); });
Musaddiq Khan
54
var phone = '2124771000',
    formatted = phone.substr(0, 3) + '-' + phone.substr(3, 3) + '-' + phone.substr(6,4)
Marc B
la source
7
@AndreasAL: Parce qu'un moteur regex a une surcharge importante, en particulier pour quelque chose où le format d'entrée est connu et les opérations de chaîne simples sont BEAUCOUP plus efficaces. Et bien sûr, il y a la règle selon laquelle l'utilisation d'une expression régulière pour un problème vous donne simplement deux problèmes.
Marc B
4
Cette solution formate également correctement les numéros de téléphone contenant des lettres, comme "212555IDEA".
Jason Whitehorn
1
cela fonctionne bien dans l'environnement Windows mais ne fonctionne pas sur un appareil iOS. y a-t-il une alternative qui fonctionne dans les deux plates
Purushotam Sharma
12

N'oubliez pas de vous assurer que vous travaillez uniquement avec des nombres entiers.

var separator = '-';
$( ".phone" ).text( function( i, DATA ) {
    DATA
        .replace( /[^\d]/g, '' )
        .replace( /(\d{3})(\d{3})(\d{4})/, '$1' + separator + '$2' + separator + '$3' );
    return DATA;
});
Trenton Bost
la source
8

Voici une combinaison de certaines de ces réponses. Cela peut être utilisé pour les champs de saisie. Traite les numéros de téléphone composés de 7 et 10 chiffres.

// Used to format phone number
function phoneFormatter() {
  $('.phone').on('input', function() {
    var number = $(this).val().replace(/[^\d]/g, '')
    if (number.length == 7) {
      number = number.replace(/(\d{3})(\d{4})/, "$1-$2");
    } else if (number.length == 10) {
      number = number.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
    }
    $(this).val(number)
  });
}

Exemple en direct: JSFiddle

Je sais que cela ne répond pas directement à la question, mais lorsque je cherchais des réponses, c'était l'une des premières pages que j'ai trouvées. Cette réponse s'adresse donc à tous ceux qui recherchent quelque chose de similaire à ce que je recherchais.

Cruz Nunez
la source
5

Utilisez une bibliothèque pour gérer le numéro de téléphone. Libphonenumber de Google est votre meilleur pari.

// Require `PhoneNumberFormat`.
var PNF = require('google-libphonenumber').PhoneNumberFormat;

// Get an instance of `PhoneNumberUtil`.
var phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance();

// Parse number with country code.
var phoneNumber = phoneUtil.parse('202-456-1414', 'US');

// Print number in the international format.
console.log(phoneUtil.format(phoneNumber, PNF.INTERNATIONAL));
// => +1 202-456-1414

Je recommande d'utiliser ce package par seegno.

aloisdg passe à codidact.com
la source
4

J'ai fourni le lien jsfiddle pour que vous puissiez formater les numéros de téléphone américains au format (XXX) XXX-XXX

 $('.class-name').on('keypress', function(e) {
  var key = e.charCode || e.keyCode || 0;
  var phone = $(this);
  if (phone.val().length === 0) {
    phone.val(phone.val() + '(');
  }
  // Auto-format- do not expose the mask as the user begins to type
  if (key !== 8 && key !== 9) {
    if (phone.val().length === 4) {
      phone.val(phone.val() + ')');
    }
    if (phone.val().length === 5) {
      phone.val(phone.val() + ' ');
    }
    if (phone.val().length === 9) {
      phone.val(phone.val() + '-');
    }
    if (phone.val().length >= 14) {
      phone.val(phone.val().slice(0, 13));
    }
  }

  // Allow numeric (and tab, backspace, delete) keys only
  return (key == 8 ||
    key == 9 ||
    key == 46 ||
    (key >= 48 && key <= 57) ||
    (key >= 96 && key <= 105));
})

.on('focus', function() {
  phone = $(this);

  if (phone.val().length === 0) {
    phone.val('(');
  } else {
    var val = phone.val();
    phone.val('').val(val); // Ensure cursor remains at the end
  }
})

.on('blur', function() {
  $phone = $(this);

  if ($phone.val() === '(') {
    $phone.val('');
  }
});

Exemple en direct: JSFiddle

Kapilrc
la source
Comment puis-je changer ce modèle pour afficher le numéro de gauche à droite comme ==> (021) 88888888
Mostafa
3

essayez quelque chose comme ça ...

jQuery.validator.addMethod("phoneValidate", function(number, element) {
    number = number.replace(/\s+/g, ""); 
    return this.optional(element) || number.length > 9 &&
        number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

$("#myform").validate({
  rules: {
    field: {
      required: true,
      phoneValidate: true
    }
  }
});
Anuj Patel
la source
2

Considérez libphonenumber-js ( https://github.com/halt-hammerzeit/libphonenumber-js ) qui est une version plus petite du célèbre libphonenumber complet.

Exemple rapide et sale:

$(".phone-format").keyup(function() {
// Don't reformat backspace/delete so correcting mistakes is easier
if (event.keyCode != 46 && event.keyCode != 8) {
    var val_old = $(this).val();
    var newString = new libphonenumber.asYouType('US').input(val_old);
    $(this).focus().val('').val(newString);
}
});

(Si vous utilisez une regex pour éviter un téléchargement de bibliothèque, éviter le reformatage sur retour arrière / suppression facilitera la correction des fautes de frappe.)

Adam Lane
la source
2

Une solution alternative:

function numberWithSpaces(value, pattern) {
  var i = 0,
    phone = value.toString();
  return pattern.replace(/#/g, _ => phone[i++]);
}

console.log(numberWithSpaces('2124771000', '###-###-####'));

Penny Liu
la source
1

J'ai trouvé cette question en cherchant sur Google un moyen de formater automatiquement les numéros de téléphone via un plugin jQuery. La réponse acceptée n'était pas idéale pour mes besoins et beaucoup de choses se sont passées au cours des 6 années écoulées depuis sa publication initiale. J'ai finalement trouvé la solution et je la documente ici pour la postérité.

Problème

Je voudrais que le champ de saisie HTML de mon numéro de téléphone formate automatiquement (masque) la valeur au fur et à mesure que l'utilisateur tape.

Solution

Découvrez Cleave.js . C'est un moyen très puissant / flexible et simple de résoudre ce problème et de nombreux autres problèmes de masquage des données.

Formater un numéro de téléphone est aussi simple que:

var cleave = new Cleave('.input-element', {
    phone: true,
    phoneRegionCode: 'US'
});
Tod Birdsall
la source
1

Contribution:

4546644645

Code:

PhoneNumber = Input.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, "($1)$2-$3");

Production:

(454)664-4645
Sushant
la source
0
 $(".phoneString").text(function(i, text) {
            text = text.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
            return text;
        });

Sortie :-( 123) 657-8963

nirali
la source
-2

peut-être que cela aidera

var countryCode = +91;
var phone=1234567890;
phone=phone.split('').reverse().join('');//0987654321
var formatPhone=phone.substring(0,4)+'-';//0987-
phone=phone.replace(phone.substring(0,4),'');//654321
while(phone.length>0){
formatPhone=formatPhone+phone.substring(0,3)+'-';
phone=phone.replace(phone.substring(0,3),'');
}
formatPhone=countryCode+formatPhone.split('').reverse().join('');

vous obtiendrez le + 91-123-456-7890

user6560624
la source