Come formattare un numero di telefono con jQuery


93

Attualmente sto visualizzando i numeri di telefono come 2124771000. Tuttavia, ho bisogno del numero per essere formattato in una forma più leggibile, per esempio: 212-477-1000. Ecco la mia attuale HTML:

<p class="phone">2124771000</p>

1
Risposta troppo tardi, ma solo per aiutare coloro che atterrano su questa pagina URL: igorescobar.github.io/jQuery-Mask-Plugin
Senthil

5
Non sono sicuro di aver compreso lo stato di chiusura su questo. Not Constructive non mi sembra corretto ... Trovo queste informazioni estremamente utili e un'associazione diretta al problema che mi ha portato qui. Non contesto il fatto che sia chiuso, ma il motivo mostrato per essere chiuso
Brett Weber

Forse la domanda è stata modificata ed era meno descrittiva prima ... mi sembra una domanda e risposta SO perfettamente valida e molti voti positivi.
Kevin Nelson

1
Libreria di Google github.com/googlei18n/libphonenumber non richiede jQuery.
nu everest

Risposte:


217

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

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

Oppure: 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');
});

Nota: il metodo .text () non può essere utilizzato sugli elementi di input. Per il testo del campo di input, utilizzare il metodo .val ().


4
L'ho modificato per supportare gli eventi di "modifica" all'interno dei campi di input. jsfiddle.net/gUsUK
Zach Shallbetter

3
Un po 'più robusto di una regex (anche se richiede una funzione di sostituzione personalizzata) sarebbe /(\d{3})?(\d{3})(\d{4})$/nel caso in cui non ci sia un prefisso
RevanProdigalKnight

È valido per i numeri di telefono di tutto il mondo?
RamPrasadBismil

Se sulla pagina sono presenti più numeri di telefono, prendere in considerazione l'utilizzo della funzione $ (selector) .each () per applicare facilmente questa maschera a tutti i numeri.
Daniel Siebert

Voglio implementarlo con la pressione dei tasti e l'evento di sfocatura. Non sta formattando il numero di telefono quando le cifre sono inferiori a 10. Il codice di esempio è: $('#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)

7
@AndreasAL: Perché un motore regex ha un sovraccarico pesante, specialmente per qualcosa in cui il formato di input è noto e le semplici operazioni sulle stringhe sono MOLTO più efficienti. E, naturalmente, c'è la regola che l'uso di una regex per un problema ti fa semplicemente avere due problemi.
Marc B

4
Questa soluzione formatta anche correttamente i numeri di telefono contenenti lettere, come "212555IDEA".
Jason Whitehorn

1
funziona bene nell'ambiente Windows ma non funziona nel dispositivo iOS. c'è qualche alternativa che funziona in entrambe le piattaforme
Purushotam Sharma

12

Non dimenticare di assicurarti di lavorare con numeri puramente interi.

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;
});

8

Ecco una combinazione di alcune di queste risposte. Questo può essere utilizzato per i campi di input. Si occupa di numeri di telefono di 7 e 10 cifre.

// 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)
  });
}

Esempio dal vivo: JSFiddle

So che questo non risponde direttamente alla domanda, ma quando cercavo le risposte questa è stata una delle prime pagine che ho trovato. Quindi questa risposta è per chiunque cerchi qualcosa di simile a quello che stavo cercando.


5

Usa una libreria per gestire il numero di telefono. Libphonenumber di Google è la soluzione migliore.

// 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

Consiglio di utilizzare questo pacchetto di seegno.


4

Ho fornito il collegamento jsfiddle per formattare i numeri di telefono degli Stati Uniti come (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('');
  }
});

Esempio dal vivo: JSFiddle


Come posso cambiare questo modello per mostrare il numero da sinistra a destra come ==> (021) 88888888
Mostafa

3

prova qualcosa di simile ..

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
    }
  }
});

2

Considera libphonenumber-js ( https://github.com/halt-hammerzeit/libphonenumber-js ) che è una versione più piccola del completo e famoso libphonenumber.

Esempio veloce e sporco:

$(".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);
}
});

(Se usi una regex per evitare il download di una libreria, evita la riformattazione su backspace / elimina renderà più facile correggere gli errori di battitura.)


2

Una soluzione alternativa:

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

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


1

Ho trovato questa domanda mentre cercavo su Google un modo per formattare automaticamente i numeri di telefono tramite un plugin jQuery. La risposta accettata non era l'ideale per le mie esigenze e sono successe molte cose nei 6 anni da quando è stata originariamente pubblicata. Alla fine ho trovato la soluzione e la sto documentando qui per i posteri.

Problema

Vorrei che il campo di immissione HTML del mio numero di telefono formatta automaticamente (maschera) il valore mentre l'utente digita.

Soluzione

Dai un'occhiata a Cleave.js . È un modo molto potente / flessibile e semplice per risolvere questo problema e molti altri problemi di mascheramento dei dati.

Formattare un numero di telefono è facile come:

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

1

Ingresso:

4546644645

Codice:

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

Produzione:

(454)664-4645

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

Risultato :-( 123) 657-8963


-2

potrebbe essere questo aiuterà

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('');

riceverai + 91-123-456-7890

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.