2012-01-06 12 views
81

Attualmente sto visualizzando numeri di telefono come 2124771000. Tuttavia, ho bisogno che il numero sia formattato in un formato più leggibile, ad esempio: 212-477-1000. Ecco il mio attuale HTML:Come formattare un numero di telefono con jQuery

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

risposta Too Late , ma solo per aiutare quelli che atterrano su questa pagina URL: http://igorescobar.github.io/jQuery-Mask-Plugin/ – Senthil

+5

Non sono sicuro di aver capito lo stato di chiusura su questo. Non costruttivo non sembra giusto ...Trovo queste informazioni estremamente utili e un'associazione diretta al problema che mi ha portato qui. Non contestiamo il fatto che sia chiuso, ma il motivo visualizzato per essere chiuso –

+0

Forse la domanda è stata modificata ed è stata meno descrittiva prima ... sembra una domanda e una risposta SO perfettamente valide per me, e un sacco di voti positivi. Libreria –

risposta

190

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'); 
}); 
+3

L'ho modificato per supportare gli eventi 'change' all'interno dei campi di input. http://jsfiddle.net/gUsUK/ –

+2

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

+0

È valido per i numeri di telefono in tutto il mondo? – user2601010

49
var phone = '2124771000', 
    formatted = phone.substr(0, 3) + '-' + phone.substr(3, 3) + '-' + phone.substr(6,4) 
+6

@AndreasAL: Perché un motore regex ha un sovraccarico pesante, soprattutto per qualcosa in cui il formato di input è noto e le operazioni di stringa semplici sono FAR più efficienti. E, naturalmente, c'è la regola che usare una regex per un problema ti fa solo avere due problemi. –

+4

Questa soluzione formatta correttamente anche i numeri di telefono con lettere al loro interno, come "212555IDEA". –

+0

funziona bene in ambiente Windows ma non funziona con il dispositivo iOS. C'è qualche alternativa che funziona su entrambe le piattaforme –

3

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

Non dimenticarti di assicurarti di lavorare con gli interi puramente.

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

ottimo punto, vale la pena notare. –

3

Ecco una combinazione di alcune di queste risposte. Questo può essere usato per i campi di input. Gestisce numeri di telefono lunghi 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) 
    }); 
} 

vivo esempio: JSFiddle

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

1

ho fornito collegamento jsfiddle per di 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

4

utilizzare 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 

vi consiglio di utilizzare questo package da seegno.

-2

può essere che questo vi 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(''); 

otterrete + 91-123-456-7890

0

Considerate libphonenumber-js (https://github.com/halt-hammerzeit/libphonenumber-js), che è una versione più piccola del libphonenumber ricca e conosciuta.

rapida ed esempio sporca:

$(".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 si utilizza una regex per evitare un download biblioteca, evitare di riformattare il backspace/delete renderà più facile per correggere errori di battitura.)

Problemi correlati