Página 1 de 1

StringRegExp: validar formato de email.

Publicado: 23 Mar 2011, 22:01
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

Re: StringRegExp: validar formato de email.

Publicado: 24 Mar 2011, 21:45
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.

Re: StringRegExp: validar formato de email.

Publicado: 25 Mar 2011, 10:26
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?

Re: StringRegExp: validar formato de email.

Publicado: 27 Mar 2011, 16:19
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

Re: StringRegExp: validar formato de email.

Publicado: 29 Mar 2011, 00:37
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