Con una sencilla
expresión regular, puedes lograr tu cometido.
Código Javascript
:
Ver originalvar pattern = /\d/,
caja = document.getElementById("codigo");
caja.addEventListener("keypress", function(e){
if (!pattern.test(String.fromCharCode(e.keyCode)) || this.value.length == 10)
e.preventDefault();
if (this.value.length === 1)
this.value += "-";
}, false);
Con la expresión regular
\d, validaremos que todos los caracteres que se ingresen desde el teclado sean números. Cuando el caracter no sea un número o si la caja de texto contiene 10 caracteres (el número inicial, el guión y los otros 8 números), se evitará el comportamiento natural del evento
keypress (tecla pulsada), el cual consiste en imprimir el valor de la tecla en la caja de texto. Para esto, hago uso del método
preventDefault. Luego, cuando la cantidad de caracteres ingresados sea igual a uno y volvamos a pulsar una tecla, se añadirá automáticamente un guión al valor de la caja de texto.
Con el método
test, verifico que el valor de la tecla pulsada, el cual obtengo mediante el valor Unicode del mismo con el método
keyCode y luego obteniendo su valor correspondiente en cadena, es decir, el valor que observamos en la tecla (el elemento físico) con el método
String.fromCharCode, corresponda con lo indicado en la expresión regular.
DEMO
Saludos