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
no consiguieron cómo desea que el formato final sea? – Khodor
¿cuál es la diferencia entre el formato de su solución y el formato que desea? – Bergi
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