domingo, 12 de junio de 2011

Validar correo email en Java (codigo)

Con este metodo se puede validar un correo electronio de forma manual, recibe una cadena de caracteres y devuelve un boolen, true si cumple las caracteristicas o false si no las cumple.



/**
     * Este metodo valida el correo
     * El correo valida que antes de la @ 'arroba' debe de tener caracateres
     * alfanumericos solamenete, ademas entre la @ y el punto
     * tambien alfanuemricos y despues del punto
     *
     * @param m <code>String</code> es la cadena que recibe
     * @return <code>boolean</code> si el correo es valido retorna true
     */
    public boolean validarMail(String m) {

        char c1 = m.charAt(0);
        int pos1 = 0;
        int pos2 = 0;
        int a1 = 0;
        int a2 = 0;
        int a3 = 0;
        int x = 0;
        String cadena1 = "";
        String cadena2 = "";
        String cadena3 = "";

        if (c1 != '@' && c1 != '.') {


            for (int i=1; i < m.length(); i++) {
                if (m.charAt(i) == '@') {
                    pos1 = i;
                }
            }
            for (int i=1; i < m.length(); i++) {
                if (m.charAt(i) == '.') {
                    pos2 = i;
                }
            }

            cadena1 = m.substring(0, pos1);
            cadena2 = m.substring(pos1+1, pos2);
            cadena3 = m.substring(pos2+1, m.length());

            for (int i = 0;i < cadena1.length(); i++) {
                System.out.println("carcater "+cadena1);
                a1 = cadena1.codePointAt(i);//
                if ((a1 > 47 && a1 < 58  ) || (a1 > 64 && a1 < 91)
                        || (a1 > 96 && a1 < 123) || a1==46 ) {
                    x++;
                }
            }
            System.out.println("1 "+cadena2);
            for (int i = 0; i < cadena2.length(); i++) {
                a2 = cadena2.codePointAt(i);
                System.out.println("carcater "+a2);
                if ((a2 > 47 && a2 < 58  ) || (a2 > 64 && a2 < 91)
                        || (a2 > 96 && a2 < 123)) {
                    x++;
                }
            }

            for (int i = 0;i < cadena3.length(); i++) {
                a3 = cadena3.codePointAt(i);
                if ((a3 > 47 && a3 < 58  ) || (a3 > 64 && a3 < 91)
                        || (a3 > 96 && a3 < 123)) {
                    x++;
                }
            }
            System.out.println("xxx "+x+"    "+(m.length()-2));
            if (x == m.length()- 2) {
                if (pos1 != 0 && pos2 != 0 && (pos1 + 2) < pos2) {

                    if (m.length()-1 >= (pos2 + 2)) {

                        return true;
                    }else {
                        return false;
                    }
                }else{
                    return false;
                }
            }else {
                return false;
            }
        }else {
            return false;
        }
    }

9 comentarios:

  1. Hola, disculpa tengo dudas de como implementar el método en un jtextfield lo estoy haciendo con el evento keyreleased y eliminando los println y solo mandando a imprimir la cadena final pero no funciona te agradecería si me pudieses orientar a resolver mi problema.

    ResponderEliminar
  2. Hola, este metodo no está diseñado para un evento keyreleased si no para validar en el momento que undas un boton y se le envie un string para que el metodo devuelva boolean, asi sabes si es valido o no y tu manejes el mensaje con el usuario, ese evento que usas valida cada vez que digitas una tecla lo cual seria diferente.

    ResponderEliminar
  3. exelente gracias man me sirvio bastante solo le cambie enves de boolean lo deje void y los returns los cambien Windows.alert

    ResponderEliminar
  4. hola creo que hay algo que no se han dado cuenta esta verificacion hay que hacerla antes if (pos1 != 0 && pos2 != 0 && (pos1 + 2) < pos2) no casi al final pues es la que garantiza que exista al menos un @ o un . en el correo. En mi caso la use inmediatamente despues de guardar en variables los split correspondientes a los valores iniciales hasta el @, luego los de el @ hasta el . y luego del . al final. Vale tambien pensar que existen correos compuestos de puntos por ejemplo marlon.gongora@subdomain.domain. Gracias

    ResponderEliminar
  5. Primero que nada, gracias por publicar tu codigo, me sera de ayuda en mi app que estoy haciendo para android, quisiera comentar que añadi estas lineas justo despues de obtener los valores de pos1 y pos2 if (pos1 == 0 && pos2 == 0){return false;} si no las añado deja pasar correos del tipo "asvfdgfdg" como validos

    ResponderEliminar
  6. bien que te sirva, esa línea que agregaste es en los 2 for?

    ResponderEliminar