Foros del Web » Programando para Internet » PHP »

Expresion regular para el DNI

Estas en el tema de Expresion regular para el DNI en el foro de PHP en Foros del Web. Hola... Estoy intentando validar el DNI con expresiones regulares pero siempre me da como falso. El codigo es este... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 13/12/2009, 08:49
Avatar de juanolo  
Fecha de Ingreso: abril-2008
Mensajes: 251
Antigüedad: 16 años, 7 meses
Puntos: 5
Pregunta Expresion regular para el DNI

Hola...

Estoy intentando validar el DNI con expresiones regulares pero siempre me da como falso.

El codigo es este...

Código PHP:
Ver original
  1. $dni='99999999Q'
  2. $formato=preg_match('/[0-9]{7,8}[A-Z]/', $dni);
  3.     //echo $formato;
  4.     if ($formato==1)
  5.     {
  6.         echo='OK';
  7.     }
  8.     else
  9.     {
  10.         echo='Escribe correctamente el DNI';
  11.     }

La expresion regular dice que...
Se pueden escribir 7,8 o mas caracteres numericos y debe tener un ultimo caracter literal en mayusculas. Ej: 99999999Q

¿Porque siempre me entra en el else?
  #2 (permalink)  
Antiguo 13/12/2009, 08:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Expresion regular para el DNI

Lo que haz hecho más bien tiene varios errores,
Primero no haz cerrado la consulta usando el semicolon en la linea 1.
Segundo los echo no tienen simbolo de = para imprimir en la pantalla.
Con eso lo que haz hecho debe funcionar.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 13/12/2009, 10:54
 
Fecha de Ingreso: mayo-2006
Mensajes: 288
Antigüedad: 18 años, 5 meses
Puntos: 4
Respuesta: Expresion regular para el DNI

mas o menos asi:

Código PHP:
$dni='99999999Q';
$formato=preg_match('/[0-9]{7,8}[A-Z]/'$dni);
    
//echo $formato;
    
if ($formato==1)
    {
        echo 
'OK';
    }
    else
    {
        echo 
'Escribe correctamente el DNI';
    } 
  #4 (permalink)  
Antiguo 13/12/2009, 11:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Expresion regular para el DNI

¿Te funciona? En la condicion de if quitale el ==1 ya que de por sí te va a lanzar como positivo o negativo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 13/12/2009, 11:20
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 8 meses
Puntos: 62
Respuesta: Expresion regular para el DNI

http://www.gskinner.com/RegExr/
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #6 (permalink)  
Antiguo 13/12/2009, 14:29
Avatar de juanolo  
Fecha de Ingreso: abril-2008
Mensajes: 251
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Expresion regular para el DNI

Vaya, al final fue un error bastante tonto...

Exactamente no era ese el codigo que tenia (el que puse arriba lo hice aqui deprisa y corriendo solo para dar una idea del codigo que tenia, porque creia que era por algo de la expresion regular, de ahi errores absurdos como lo del = en el echo y la falta de punto y coma en la linea 1;)

El caso es que al dni lo tenia con un strtolower para que siempre fuera minusculas y la expresion regular al tener [A-Z] solo pillaba las mayusculas y siempre daba falso.

Simplemente cambie el strtolower a strtoupper (me interesa guardar en la base de datos el DNI con la letra en mayuscula) y listo.

Gracias a todos! ^.^
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:05.