StringRegExp: validar formato de email.

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
joaquin
Aprendiz de Mago
Mensajes: 48
Registrado: 04 Jun 2008, 22:31
Ubicación: Barcelona, España

StringRegExp: validar formato de email.

Mensaje por joaquin »

Estoy intentando utilizar las expresiones regulares para validar el formato de un email:
StringRegExp($line,"\w+([\.-]{1})?\w+@\w+(\.\w{2,4})+",0)
El patrón indicado validaria un mail como "[email protected]"
Quisiera que me detectara como inválido ".."
¿Alguien puede sugerirme cómo hacerlo?
Saludos
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: StringRegExp: validar formato de email.

Mensaje por Chefito »

Aquí tienes una discusión sobre la validación de direcciones emails: http://www.emesn.com/autoitforum/viewto ... idar#p4348

Tu código permite emails que no están permitidos. Tendrías que pulirlo mucho más. Mira el post de arriba y sus funciones.

Imagina que tú expresión fuese bien. Una forma para detectar dos o más puntos seguidos podrías ser esta:

Código: Seleccionar todo

$line="[email protected]"
If Not StringInStr($line, "..") Then
	$resultado=StringRegExp($line,"\w+([\.-]{1})?\w+@\w+(\.\w{2,4})+",0)
Else
	$resultado=0
EndIf
ConsoleWrite($resultado)
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: StringRegExp: validar formato de email.

Mensaje por Ximorro »

Uf, tengo que estudiar las regexp, es un tema que siempre me ha sorprendido por las maravillas que se pueden hacer, pero nunca me he metido a fondo y a veces me parece magia.

Muy hábil Chefito usando StringInStr previo a StringRegExp, nos empeñamos en hacerlo todo con regexp y nos complicamos la vida, a veces alguna comprobación previa sencilla como esta puede ahorrar buenos dolores de cabeza.

No sé si será directamente aplicable, yo una vez hice algo parecido a esto de dejar un punto pero no dos:
\A\w+[.]*\w*\Z

Eso permite cadenas con letras y números y que sólo tenga un punto, que puede estar por medio o al final. No sé si puede adaptarse a lo que quieres porque no era para lo mismo, por ejemplo tú sí permites dos puntos, siempre que no estén juntos, y la verdad es que no se me ocurre cómo modificar esto para añadir esa restricción...

De todas maneras... ¿seguro que un mail no permite que tengas dos puntos seguidos? quizás en el dominio, pero en el nombre de usuario creo que sí ¿no?
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: StringRegExp: validar formato de email.

Mensaje por jamaro »

Hola, las expresiones son un mundo, y precisamente, haciendo modificaciones en mis programas, esta misma mañana descubrí que en la ayuda hay un código para verificar las expresiones: StringRegExpGUI.au3 que es muy útil para hacer pruebas.

Saludos
joaquin
Aprendiz de Mago
Mensajes: 48
Registrado: 04 Jun 2008, 22:31
Ubicación: Barcelona, España

Re: StringRegExp: validar formato de email.

Mensaje por joaquin »

Gracias por las sugerencias y comentarios.
"El formato de las direcciones de correo electrónico está definida en las normas RFC 5322 y en el RFC 5321. Respecto al uso del carácter punto (.) en la parte local de la dirección de correo establecen las siguientes restricciones: se puede utilizar siempre que no sea el primer o último caracter y siempre que no aparezca dos o más veces consecutivamente"
No he encontrado la forma efectiva de añadir la expresión. Probé con ([^\w][\w]?) y otras variantes...
Finalmente, recogiendo la idea de Chefito, hago una verificación previa pero añadiendo otra función StringRegExp que permite verificar otros patrones erróneos.

Código: Seleccionar todo


$var = FileOpenDialog("  Seleccionar Archivo", @DesktopDir & "\", "Texto (*.txt;*.xml)", 1 + 4 )
$file = FileOpen($var,0)


While 1
    $line = FileReadLine($file)
	If @error = -1 Then ExitLoop

    $check1 = StringRegExp($line,"[ ]|([|][|])|([^\w][^\w])",0)

	If $check1 ==0 Then
		$check2 = StringRegExp($line,"(\w+\.?\-?)+\w+\-?@(\w+\-?\.?)+(\.\w{2,4})+",0)
		If $check2 ==0 Then
			filewr()
		EndIf
	Else
		filewr()
	EndIf
Wend

Func filewr()
    $file2 = FileOpen("ErrorMail.txt", 1)
	FileWriteLine($file2,$line & @CRLF)
	FileClose($file2)
EndFunc

FileClose($file)
Exit

Saludos
Responder