La expresión regular para validar un email entero es: (comento que puede que no sea del todo correcta)
"[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$"
Esta puede tener algún fallo: "[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-zA-Z0-9_]+[.[a-zA-Z]+]+"
También esta otra: [a-zA-Z0-9][a-zA-Z0-9_-]+[\\p{Punct}[a-zA-Z0-9_-]+]*@[a-zA-Z0-9_]+[\\{Punct}[a-zA-Z]+]+
También hay dos metodos para validar por separado, uno para la parte izquierda del email y otro para la derecha derecha del email.
import java.util.regex.*;
import java.util.StringTokenizer;
public class Main {
public boolean validateEmail(String email) {
Pattern p = Pattern.compile("[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$");//me gusta esta
Matcher m = p.matcher(email);
return m.matches();
}
public boolean validateLeftEmail(String emailLeft) {
Pattern p = Pattern.compile("[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*");
Matcher m = p.matcher(emailLeft);
return m.matches();
}
public boolean validateRightEmail(String emailRight) {
Pattern p = Pattern.compile("[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$");
Matcher m = p.matcher(emailRight);
return m.matches();
}
public static void main(String[] args) {
Main miMain = new Main();
System.out.println("*****************************validateEmail******************************************");
System.out.println("email: " + "example@cs.uns.edu.ar " + miMain.validateEmail("example@cs.uns.edu.ar"));
System.out.println("email: " + "name-surname@computer_name.net_name.com " + miMain.validateEmail("name-surname@computer_name.net_name.com"));
System.out.println("email: " + "name-sur#name@computer_name.net_name.com " + miMain.validateEmail("name-sur#name@computer_name.net_name.com"));
System.out.println("email: " + "name-surname@comp#uter_name.net_name.com " + miMain.validateEmail("name-surname@comp#uter_name.net_name.com"));
System.out.println("email: " + "name-surname@computer_name.net_na#me.com " + miMain.validateEmail("name-surname@computer_name.net_na#me.com"));
System.out.println("email: " + "!u@hotm@ail.co " + miMain.validateEmail("!u@hotm@ail.co"));
System.out.println("email: " + "u@hotm@ail.co " + miMain.validateEmail("u@hotm@ail.co"));
System.out.println("email: " + "u@hotmail.co " + miMain.validateEmail("u@hotmail.co"));
System.out.println("email: " + "u@hotmail.c " + miMain.validateEmail("u@hotmail.c"));
System.out.println("email: " + "!u@hotmail.cc " + miMain.validateEmail("!u@hotmail.cc"));
System.out.println("email: " + "uu@hotmail.cc " + miMain.validateEmail("uu@hotmail.cc"));
System.out.println("email: " + "@hotmail.cc " + miMain.validateEmail("@hotmail.cc"));
System.out.println("email: " + ".u@hotmail.cc " + miMain.validateEmail(".u@hotmail.cc"));
System.out.println("email: " + "u.u@hotmail.cc " + miMain.validateEmail("u.u@hotmail.cc"));
System.out.println("email: " + "u u@hotmail.cc " + miMain.validateEmail("u u@hotmail.cc"));
System.out.println("email: " + "uu@h.cc " + miMain.validateEmail("uu@h.cc"));
System.out.println("email: " + "5u@h.cc " + miMain.validateEmail("5u@h.cc"));
System.out.println("email: " + "uu@hh.cc " + miMain.validateEmail("uu@hh.cc"));
System.out.println("email: " + "5uu@hh.cc " + miMain.validateEmail("5uu@hh.cc"));
System.out.println("email: " + "5uu@h.cc " + miMain.validateEmail("5uu@h.cc"));
System.out.println("email: " + "5.cc " + miMain.validateEmail("5.cc"));
System.out.println("email: " + "5@h.cc " + miMain.validateEmail("5@h.cc"));
System.out.println("email: " + "5@h.cc.d " + miMain.validateEmail("5@h.cc.d"));
System.out.println("email: " + "5@h.cc.dd " + miMain.validateEmail("5@h.cc.dd"));
System.out.println("email: " + "5@h.c.dd " + miMain.validateEmail("5@h.c.dd"));
System.out.println("email: " + "avf-@h.c.dd " + miMain.validateEmail("avf-@h.c.dd"));
System.out.println("email: " + "a-vf@h.c.dd " + miMain.validateEmail("a-vf@h.c.dd"));
System.out.println("email: " + "avf@h.c.dd " + miMain.validateEmail("avf@h.c.dd"));
System.out.println("email: " + "-avf@h.c.dd " + miMain.validateEmail("-avf@h.c.dd"));
System.out.println("email: " + "_avf@h.c.dd " + miMain.validateEmail("_avf@h.c.dd"));
System.out.println("email: " + "a-_-_.-_b--d__-@h.c.dd " + miMain.validateEmail("a-_-_.-_b--d__-@h.c.dd"));
System.out.println("email: " + "a_._-@h.c.dd " + miMain.validateEmail("a_._-@h.c.dd"));
System.out.println("email: " + "a_.-@h.c.dd " + miMain.validateEmail("a_.-@h.c.dd"));
System.out.println("email: " + "a.-@h.c.dd " + miMain.validateEmail("a.-@h.c.dd"));
System.out.println("*****************************validateRightEmail******************************************");
System.out.println("email: " + "cs.uns.edu.ar " + miMain.validateRightEmail("cs.uns.edu.ar"));
System.out.println("email: " + "computer_name.net_name.com " + miMain.validateRightEmail("computer_name.net_name.com"));
System.out.println("email: " + "comp#uter_name.net_name.com " + miMain.validateRightEmail("comp#uter_name.net_name.com"));
System.out.println("email: " + "computer_name.net_na#me.com " + miMain.validateRightEmail("computer_name.net_na#me.com"));
System.out.println("email: " + "hotm@ail.co " + miMain.validateRightEmail("hotm@ail.co"));
System.out.println("email: " + "hotmail.co " + miMain.validateRightEmail("hotmail.co"));
System.out.println("email: " + "hotmail.c " + miMain.validateRightEmail("hotmail.c"));
System.out.println("email: " + "h.cc " + miMain.validateRightEmail("h.cc"));
System.out.println("email: " + "hh.cc " + miMain.validateRightEmail("hh.cc"));
System.out.println("email: " + "5.cc " + miMain.validateRightEmail("5.cc"));
System.out.println("email: " + "h.cc.d " + miMain.validateRightEmail("h.cc.d"));
System.out.println("email: " + "h.cc.dd " + miMain.validateRightEmail("h.cc.dd"));
System.out.println("email: " + "h.c.dd " + miMain.validateRightEmail("h.c.dd"));
System.out.println("email: " + "ail.co " + miMain.validateRightEmail("ail.co"));
System.out.println("email: " + "hotm@ail.co " + miMain.validateRightEmail("hotm@ail.co"));
System.out.println("email: " + "hotm " + miMain.validateRightEmail("hotm"));
System.out.println("email: " + "hotmail.co " + miMain.validateRightEmail("hotmail.co"));
System.out.println("email: " + "hotmail.c " + miMain.validateRightEmail("hotmail.c"));
System.out.println("email: " + "hotmail.cc " + miMain.validateRightEmail("hotmail.cc"));
System.out.println("email: " + "h.cc " + miMain.validateRightEmail("h.cc"));
System.out.println("email: " + "5.cc " + miMain.validateRightEmail("5.cc"));
System.out.println("email: " + "h.cc.d " + miMain.validateRightEmail("h.cc.d"));
System.out.println("email: " + "h.cc.dd " + miMain.validateRightEmail("h.cc.dd"));
System.out.println("email: " + "5h.c.dd " + miMain.validateRightEmail("5h.c.dd"));
System.out.println("*****************************validateLeftEmail******************************************");
System.out.println("email: " + "!u@hotm " + miMain.validateLeftEmail("!u"));
System.out.println("email: " + "u " + miMain.validateLeftEmail("u"));
System.out.println("email: " + "uu " + miMain.validateLeftEmail("uu"));
System.out.println("email: " + "!u " + miMain.validateLeftEmail("!u"));
System.out.println("email: " + ".u " + miMain.validateLeftEmail(".u"));
System.out.println("email: " + "u.u " + miMain.validateLeftEmail("u.u"));
System.out.println("email: " + "u u " + miMain.validateLeftEmail("u u"));
System.out.println("email: " + "5u " + miMain.validateLeftEmail("5u"));
System.out.println("email: " + "5.cc " + miMain.validateLeftEmail("5.cc"));
System.out.println("email: " + "5 " + miMain.validateLeftEmail("5"));
System.out.println("email: " + "avf- " + miMain.validateLeftEmail("avf-"));
System.out.println("email: " + "a-vf " + miMain.validateLeftEmail("a-vf"));
System.out.println("email: " + "avf " + miMain.validateLeftEmail("avf"));
System.out.println("email: " + "-avf " + miMain.validateLeftEmail("-avf"));
System.out.println("email: " + "_avf " + miMain.validateLeftEmail("_avf"));
System.out.println("email: " + "a-_-_.-_b--d__- " + miMain.validateLeftEmail("a-_-_.-_b--d__-"));
System.out.println("email: " + "a_._- " + miMain.validateLeftEmail("a_._-"));
System.out.println("email: " + "a_.- " + miMain.validateLeftEmail("a_.-"));
System.out.println("email: " + "a.- " + miMain.validateLeftEmail("a.-"));
}
}
¿Y la expresion regular no seria mas bien:
"[a-zA-Z0-9]+[a-zA-Z0-9_-]*@[a-zA-Z]+\\p{Punct}[a-zA-Z]+"
Es que no le veo la logica a la que has puesto T.T
Prueba con esta, a mi me va bien
Si le falta algo se lo añades y si le sobra se lo quitas (es que tampoco se muy bien cuales son los caracteres permitidos en una direccion de email XD)
que se supone que quiere decir:
"[a-zA-Z0-9]+[a-zA-Z0-9_-]*@[a-zA-Z]+\\p{Punct}[a-zA-Z]+" :huh:
perdonad mi ignorancia, y tambienq ue significa y para que sirve el patern y el compile.
saludos
Hola Danther en la que has puesto me parece que faltaría el "." de la parte de la izquierda. Y lo que dices de los caracteres permitidos igual habría que revisarlo.
Esta expresión \\p{Punct} no se mu bien que significa.
Debci explico :) :=> [a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-zA-Z0-9_]+[.[a-zA-Z]+]+
[a-zA-Z0-9]+ => valida las cadenas que contienen al menos un caracter de esos tres rangos es igual el orden de los caracteres y tal. El + quiere decir eso, que al menos tiene que haber un caracter, sino no la da por buena.
[a-zA-Z0-9_-]+ => lo mismo que el anterior pero esta cadena puede contener guión y guión bajo
[.[a-zA-Z0-9_-]+]* => el punto signf. cualquier carácter. El asterisco quiere decir que todo ese bloque es o no es... jeje esa es la cuestión. Quiero decir que o aparece o no.
Por ejemplo:
- si tienes sólo ".d" es valido
- si tienes sólo "." no es valido porque como hemos dicho el "+" significa que tiene que haber al menos un caracter.
- si tienes sólo "" es decir cadena vacia es valido
@ => luego va la arroba y lo siguiente mas de lo mismo.
Lo de Pattern es para establecer un patrón, y el compile para compilar la cadena respecto a dicho patrón. Bueno para que te hagas una idea que tampoco controlo el tema.
Alguna referencia:
http://www.programacion.com/java/articulo/expresionesreg/ (http://www.programacion.com/java/articulo/expresionesreg/)
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html (http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html)
Iré probando a ver que tal va, sino cambiamos la expresión.
Un "." no quiere decir .
Sino cualquier caracter
\\p{Punct} es "."
Por lo tanto [a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*
Significa:
"uno o mas de [a-zA-Z0-9]" y luego "ninguno o mas de: cualquier caracter seguido de uno o mas [a-zA-Z0-9_-]"
Asi que para que quede bien seria:
[a-zA-Z0-9][a-zA-Z0-9_-]+[\\p{Punct}[a-zA-Z0-9_-]+]*@[a-zA-Z0-9_]+[\\Punct[a-zA-Z]+]+
Pruebala ahora, creo que cumple con lo que quieres
Mirate que antes no podias poner _ ni - en la parte izquierda hasta el primer "punto", ahora mientras - o _ no sean el primer caracter, si se puede poner antes del primer "punto"
mmm... sip me colao, ahora lo cambio. ahms... que el método validateRightEmail no esta bién del todo, ese hay que mirarlo que se cuelan cadenas así "hotm".
El problema estaba en esto:
[.[a-zA-Z0-9_-]+]*
No significa de 0 a x veces "punto y x caracteres"
Sino de 0 a x veces intervalo entre punto, a-z, A-Z, 0-9, _, -
Ademas \p{Punct] incluye muchos mas simbolos, es mejor \.
Prueba ahora con esta:
[a-zA-Z0-9][a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+
y si mi dirección esta en un subdominio? ej: example@cs.uns.edu.ar ? Creo que hay que revisar eso despues del arroba (digo creo, porque lo lei medio apurado).
Cita de: juancho77 en 4 Agosto 2009, 07:38 AM
y si mi dirección esta en un subdominio? ej: example@cs.uns.edu.ar ? Creo que hay que revisar eso despues del arroba (digo creo, porque lo lei medio apurado).
Pues no la da por valida... :(
[a-zA-Z0-9][a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+
Esta si --^--^ -->-->
Hola Danther, he estao mirando el codigo y en validateEmail() yo quitaría lo de "validate country code" porque creo que se podría hacer directamente con la expresión regular.
En este sitio he visto también una expresión regular pero creo que es .net:
http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
package expresionesregularesemail;
import java.util.regex.*;
import java.util.StringTokenizer;
public class Main {
public boolean validateEmail(String email){
//Pattern p = Pattern.compile("[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-zA-Z0-9_]+[.[a-zA-Z]+]+"); //original
Pattern p = Pattern.compile("[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$");
//@"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$"
// Match the given string with the pattern
Matcher m = p.matcher(email);
return m.matches();
}
public static void main(String[] args) {
Main miMain = new Main();
System.out.println("*****************************validateEmail******************************************");
System.out.println("email: "+"example@cs.uns.edu.ar "+miMain.validateEmail("example@cs.uns.edu.ar"));
System.out.println("email: "+"name-surname@computer_name.net_name.com "+miMain.validateEmail("name-surname@computer_name.net_name.com"));
System.out.println("email: "+"!u@hotm@ail.co "+miMain.validateEmail("!u@hotm@ail.co"));
System.out.println("email: "+"u@hotm@ail.co "+miMain.validateEmail("u@hotm@ail.co"));
System.out.println("email: "+"u@hotmail.co "+miMain.validateEmail("u@hotmail.co"));
System.out.println("email: "+"u@hotmail.c "+miMain.validateEmail("u@hotmail.c"));
System.out.println("email: "+"!u@hotmail.cc "+miMain.validateEmail("!u@hotmail.cc"));
System.out.println("email: "+"uu@hotmail.cc "+miMain.validateEmail("uu@hotmail.cc"));
System.out.println("email: "+"@hotmail.cc "+miMain.validateEmail("@hotmail.cc"));
System.out.println("email: "+".u@hotmail.cc "+miMain.validateEmail(".u@hotmail.cc"));
System.out.println("email: "+"u.u@hotmail.cc "+miMain.validateEmail("u.u@hotmail.cc"));
System.out.println("email: "+"u u@hotmail.cc "+miMain.validateEmail("u u@hotmail.cc"));
System.out.println("email: "+"u@h.cc "+miMain.validateEmail("5u@h.cc"));
System.out.println("email: "+"5u@h.cc "+miMain.validateEmail("5u@h.cc"));
System.out.println("email: "+"5.cc "+miMain.validateEmail("5.cc"));
System.out.println("email: "+"5@h.cc "+miMain.validateEmail("5@h.cc"));
System.out.println("email: "+"5@h.cc.d "+miMain.validateEmail("5@h.cc.d"));
System.out.println("email: "+"5@h.cc.dd "+miMain.validateEmail("5@h.cc.dd"));
System.out.println("email: "+"5@h.c.dd "+miMain.validateEmail("5@h.c.dd"));
System.out.println("email: "+"avf-@h.c.dd "+miMain.validateEmail("avf-@h.c.dd"));
System.out.println("email: "+"a-vf@h.c.dd "+miMain.validateEmail("a-vf@h.c.dd"));
System.out.println("email: "+"avf@h.c.dd "+miMain.validateEmail("avf@h.c.dd"));
System.out.println("email: "+"-avf@h.c.dd "+miMain.validateEmail("-avf@h.c.dd"));
System.out.println("email: "+"_avf@h.c.dd "+miMain.validateEmail("_avf@h.c.dd"));
System.out.println("email: "+"a-_-_.-_b--d__-@h.c.dd "+miMain.validateEmail("a-_-_.-_b--d__-@h.c.dd"));
System.out.println("email: "+"a_._-@h.c.dd "+miMain.validateEmail("a_._-@h.c.dd"));
System.out.println("email: "+"a_.-@h.c.dd "+miMain.validateEmail("a_.-@h.c.dd"));
System.out.println("email: "+"a.-@h.c.dd "+miMain.validateEmail("a.-@h.c.dd"));
}
}