2010-07-11 20 views
6

Diciamo che ho una stringa diformato numeri in base a formato stringa in JavaScript/jQuery

  • formato "XXX - XXX - XXXX" (per formattare un numero di telefono), o di qualsiasi altra stringa di formato in cui sorge X per un numero
  • voglio mantenere la formattazione nella stringa di formato (spaziatura, trattini ecc), ma scambiare ciascun X per un numero e rilasciare tutta la formattazione nella stringa di origine

Esempi:

  • ingresso: "abc + d (123) 4.567.890", Format String: "XXX - XXX - XXXX", in uscita: "123-4.567.890"
  • Input "abc 1 2 3 4.567.890", Stringa formato: "X: X XXXXX, XXX", in uscita: "1: 2 34567,890"
  • Input "1234567890", Format String: "(XXX) XXX-XXXX", in uscita: "(123)456-7890 "

sto pensando che potrei prendere il numero scorrendo la stringa di origine (carattere foreach in ''), ma non sono sicuro di come posso poi mettere questo insieme elegante per il formato giusto. Forse c'è una funzione jQuery che lo fa già?

risposta

5

Ecco un modo per farlo:

function formatPhoneNumber(input, format) { 
    // Strip non-numeric characters 
    var digits = input.replace(/\D/g, ''); 

    // Replace each "X" with the next digit 
    var count = 0; 
    return format.replace(/X/g, function() { 
     return digits.charAt(count++); 
    }); 
} 
4
"abc+d(123)4567890" 
.replace(/\D/g, "") 
.replace(/(\d{3})(\d{3})(\d{4})/, "$1 - $2 - $3") 

Per prima cosa rimuovere il non-cifre (\ D), poi raggrupparli, e, infine, usiamo i gruppi nel nostro testo di sostituzione.

+0

Mi dispiace non era chiaro in che la stringa di formato può essere diverso (ad esempio, potrebbe cambiare a X-XXX-XX-XX) quindi sarebbe bisogno di essere in grado di far fronte genericamente al formato – Alex