Expresiones regulares en JavaScript: Validando DNI’s

Estaba yo acabando (a ver si es de esta) la web del hotel de mis padres y me hizo falta una función que validara el DNI de un formulario. Como ya tenía por aqui una función en JavaScript que me validaba un email a base de expresiones regulares, pues dije, vamos a ver si encuentro algo parecido para el DNI....
Pero no encontre nada, asi que me puse a mirarme esto de las expresiones regulares (regexp, que se les dice) y averigué porque no había encontrado nada: está tirado de hacer a poquito que te molestes en ver algo.
Lo pongo aquí por si a alguien le sirve de algo.

  1.  
  2. //Recibe una string y comprueba que esté en el formato (X|9)9999999-X
  3. function dni_correcto(dni) {
  4. var er_dni = /(X|\d{1})\d{7}-\D{1}/;
  5.  
  6. if (!er_dni.test(dni)) {
  7. return false;
  8. }
  9. return true;
  10. }
  11.  

Supongo que se podrá hacer mejor, pero bueno, yo estoy orgulloso de mi cutre-función y de mi primer enfretamiento con las regexp ;-)

Actualización: Función mejorada, Gracias matti ;-)


3 Comentarios

  1. G

    Hola Rick, muy interesante, lo he modificado por flash Y sobre todo hay que tener en cuenta que este pais esta lleno de extranjeros como mi ;o)

    Nosotros tenemos laDNI de la forma X9999999-L(Letra)

    Por lo tanto hay que modificar la expression que mire si a la primera posicion es un X o un Numero, seguido por 7 numeros, por el gillon, por una letra…

    Voy hacerlo luego, como es un poco dieferente en Flash no puedo servirte con la version por JS, pero lo haces facil

    Hace ni una hora que llene un formulario de lucky, dejando TODOS mis datos solo para que al final me dicen que mi DNI no es valido….jajaja

    Esto pasa siempre y es una molestia bastante grande

    Salu2

    matthi

    #1 matthias [2005/05/02 @ 17:42] Reply to matthias
  2. G

    Hola matti, gracias por el aviso, la verdad es que no tenia ni idea de lo del DNI de los extranjeros :-)
    Pues ya está arreglado, ahora se pueden poner DNI’s de la forma X9999999-L donde X es una X o un número, 9 es un número y L una letra.

    #2 Rick [2005/05/03 @ 11:23] Reply to Rick
  3. G

    Aqui teneis mi version :)

    function esDNI(campo)
    {
    valor = campo.value;

    exp_reg = /^[0-9]{8}[a-zA-Z]{1}$/;

    if ( exp_reg.test(valor) == false )
    {
    alert(“El dni que introdujo: “+valor+” no es valido”);
    }
    else
    {
    numeros = valor.substring(0,7);
    letra = valor[8];
    letra2 = averigua(numeros);
    alert ( letra+” “+letra2);
    if (letra != letra2)
    alert(“La letra del dni que introdujo: “+valor+” no es valida”);
    }

    }

    function averigua(dni)
    {
    cadena=”TRWAGMYFPDXBNJZSQVHLCKET”;
    posicion = dni % 23;
    l = cadena.substring(posicion,posicion+1);
    return l;
    }

    #3 pitbulk [2006/03/03 @ 00:02] Reply to pitbulk

Participa: