https://foro.gambas-es.org/viewtopic.php?f=1&t=359&p=2010#p2010
-----------------------------------
jguardon
Domingo, 17 Enero 2010, 02:30

Re: Validación De Email Y DNI??
-----------------------------------
Hola

Cuando hablas de los DNI (para los usuarios de fuera de España, Documento Nacional de Identidad), ¿te refieres a validar la secuencia numérica con la letra del final?

Si es así, creo que la rutina de validación es de dominio público, pero entiendo que sólo podría validarse una vez se hayan introducido todos los caracteres. Si bien mediante expresiones regulares se puede chequear que el formato sea adecuado, es decir, una cifra de 8 dígitos + una letra final, sólo si esta condición es verdadera al perder el foco el control podrías validar matemáticamente el DNI, mediante el evento _LostFocus().

Para validar un email correcto (si entendemos por correcto un identificador con un punto en medio o no, seguido de una @ y seguido de un dominio, que también puede contener uno o dos puntos), entonces es posible hacerlo también con expresiones regulares desde el manejador de evento _Change().

Las Regexp (expresiones regulares) son un mundo aparte y es una de las herramientas más potentes que existen para estos menesteres, ampliamente utilizadas en cualquier lenguaje, sobre todo Perl. Recomiendo su aprendizaje, porque te aseguro que enganchan.

Prueba esto para el tema del email:
[code linenumbers=false syntax=gambas]
PRIVATE FUNCTION chkEmail(email AS String) AS Boolean
  
    email = Trim(email)
    IF email THEN
        regx = NEW Regexp(email, "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$")     
        IF regx.Text THEN           
            RETURN TRUE
        ELSE 
            RETURN FALSE      
        ENDIF 
    ENDIF 

END
[/code]

Luego en el evento Change de tu textbox:

[code linenumbers=false syntax=gambas]
PUBLIC SUB txtEmail_Change()
   
    IF txtEmail.Text THEN    
        IF chkEmail(txtEmail.Text) THEN 
          txtEmail.ForeColor = Color.Black         
        ELSE 
         txtEmail.ForeColor = Color.Red         
        ENDIF    
    ENDIF    

END
[/code]

Si la dirección de email es correcta, se verá el texto en negro, en caso contrario aparecerá en rojo.

------------------------------------------------------------------------------

Para el tema del DNI, cambia la cadena de la Regexp por algo así:

[code linenumbers=false syntax=gambas]"^\\d{6,8}[A-Z]$"[/code]

Pero no olvides validar la letra correcta del DNI:

Debes coger sólo los dígitos (sin la letra) y calcular el MOD (módulo) de dividir entre 23

[code linenumbers=false syntax=gambas]
DIM testDNI as Integer
DIM letra as String

testDNI = val(textboxDNI.Text, len(textboxDNI.Text) - 1) MOD 23

    SELECT CASE testDNI
        CASE 0
            letra = "T"
        CASE 1
            letra = "R"
        '.......
    END SELECT[/code]

Así sucesivamente con todos los valores hasta 22

Luego has de comparar la letra introducida con la resultante del cálculo. En Google encontrarás las correspondencias del resto de la división con las letras.

Creo que tienes trabajo por hacer, comenta tus resultados.

Saludos


