2012-06-07 14 views
11

Tengo un cuadro de texto para el número de teléfono. Mi número de teléfono debe ser XXX-XXX-XXX como este formato.Número de teléfono de formato automático en Jquery

Recibí la solución para el formato XXX-XXX-XXX, pero no sé cómo modificar ese código.

$('#ssn').keyup(function() { 
    var val = this.value.replace(/\D/g, ''); 
    var newVal = ''; 
    while (val.length > 3) { 
     newVal += val.substr(0, 3) + '-'; 
     val = val.substr(3); 
    } 
    newVal += val; 
    this.value = newVal; 
}); 

http://jsfiddle.net/ssthil/nY2QT/

+0

no consiguieron cómo desea que el formato final sea? – Khodor

+3

¿cuál es la diferencia entre el formato de su solución y el formato que desea? – Bergi

+0

Posible duplicado de [Cómo formatear un número de teléfono con jQuery] (http://stackoverflow.com/questions/8760070/how-to-format-a-phone-number-with-jquery) – rnevius

Respuesta

29

Dado que está utilizando jQuery puede probar jQuery masked-input-plugin.

Hay un jsFiddle para usted here donde puede ver cómo funciona.

El código fuente para el proyecto en GitHub se puede encontrar en here.

La implementación es más sencilla:

HTML:

<input id="ssn"/> 

javascript:

$("#ssn").mask("999-999-999"); 

ACTUALIZACIÓN:

Otra buena se puede encontrar here.

+0

Gracias por su solución. Pero quiero hacerlo a través del código jquery personalizado en lugar del plugin. Todavía soy beigginer en jQuery. –

+0

@Sivasenthil: Puedo entender eso. Probablemente lo mejor es echarle un vistazo a ese código e intentar crear tu propia versión. – LeftyX

+0

El último enlace está roto. Intente aquí: http://wiki.jqueryui.com/w/page/12137996/Mask –

4

Por lo que yo puedo hacer ejercicio, lo único que tiene que hacer es esto:

$('#ssn').keyup(function() 
{ 
    this.value = this.value.replace(/(\d{3})\-?/g,'$1-'); 
}); 

pero esto sólo funcionará cuando las personas entran dígitos, por lo que me gustaría sugerir una introducción de una comprobación adicional:

$('#ssn').keyup(function(e) { 
 
    if ((e.keyCode > 47 && e.keyCode < 58) || (e.keyCode < 106 && e.keyCode > 95)) { 
 
    this.value = this.value.replace(/(\d{3})\-?/g, '$1-'); 
 
    return true; 
 
    } 
 
    
 
    //remove all chars, except dash and digits 
 
    this.value = this.value.replace(/[^\-0-9]/g, ''); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="text" id="ssn">

Un poco más en la expresión regular /(\d{3})\-?/g:
Esto reemplaza grupo de 3 dígitos consigo mismo, seguido de un guión. Los corchetes crean una referencia a los dígitos coincidentes, que se utiliza en la cadena de reemplazo ($1- -> $ 1 es la referencia posterior).
Tenga en cuenta que un guión opcional también se reemplaza, pero no se incluye en la referencia anterior. si la entrada es 123, y el patrón de reemplazo sería algo así como /(\d{3})/g, o /(\d{3}\-?)/g el valor se convertiría en 123-4, 123--45, 123---456 y así sucesivamente, doblando los guiones cada vez.

Advertencia:
Esto le dará al usuario una cierta pena, ya que las teclas de flecha y así no se work.Luckily, que es una solución fácil: Sólo tiene que añadir el siguiente código en la parte superior de su función:

if (e.keyCode > 36 && e.keyCode < 41) 
{ 
    return true; 
} 

Y las flechas funcionan bien. para otras teclas (como eliminar, retroceso, desplazamiento, etc.) check this page.

Para un ejemplo completo: here's the fiddle

+0

su solución ** dobla ** los guiones incluso cuando el usuario solo ingresa dígitos. Estoy hablando de este - 'this.value = this.value.replace (/ (\ d {3})/g, '$ 1 -');' –

+0

He corregido el primer fragmento. La solución real que sugerí (el violín que configuré), sin embargo, no duplica los guiones. –

+1

Esta es una muy buena solución, ¿cómo podría tomar este código y editarlo para permitir una máscara de número de teléfono como xxx-xxx-xxxx? – nulltek

-2

Puede configurar la máscara de entrada en cualquier campo en 3 sencillos pasos:

1: En primer lugar llaman a estas bibliotecas http://code.jquery.com/jquery-1.7.2.min.js " " https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.js "

2: Cree una forma simple como esta:

<form> <input type="text" name="phone" id="phone" /> </form> 

3: A continuación, el código de script pasado en su etiqueta script ..

$ (document) ready (function ($) {

$('#phone').mask("99999-9999999-9",{placeholder:""}); 

});

+0

@LeftyX ya mencionó este complemento en su respuesta –

-1

$('#ssn').keyup(function() { 
 
     var val = this.value.replace(/\D/g, ''); 
 
     var newVal = ''; 
 
     for(i=0;i<2;i++){ 
 
     if (val.length > 3) { 
 
      newVal += val.substr(0, 3) + '-'; 
 
      val = val.substr(3); 
 
     } 
 
     } 
 
     newVal += val; 
 
     this.value = newVal; 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="ssn" maxlength="10"/>

Cuestiones relacionadas