There are a lot of different ways to validate an email address input field. The easiest – and mostly correct – method is to use a regular expression. Two of the more complicated – and among the most incorrect – methods follow.

Jonasfound this in a custom-built web app at a customer site, and commented that it's emblematic of the quality of the whole codebase.

    private static boolean lastEmailFieldTwoCharsOrMore(String emailAddress) {
        if (emailAddress == null)
            return false;
        StringTokenizer st = new StringTokenizer(emailAddress, ".");
        String lastToken = null;
        while (st.hasMoreTokens()) {
            lastToken = st.nextToken();
        }

        if (lastToken.length() >= 2) {
            return true;
        } else {
            return false;
        }
    }

    public static boolean isValidEmailAddress(String emailAddress) {

        // a null string is invalid
        if (emailAddress == null)
            return false;

        // a string without a "@" is an invalid email address
        if (emailAddress.indexOf("@") < 0)
            return false;

        // a string without a "."  is an invalid email address
        if (emailAddress.indexOf(".") < 0)
            return false;

        if (lastEmailFieldTwoCharsOrMore(emailAddress) == false)
            return false;

        if (emailAddress.indexOf("!") > 0)
            return false;

        if (emailAddress.indexOf("#") > 0)
            return false;

        if (emailAddress.indexOf("$") > 0)
            return false;

        if (emailAddress.indexOf("%") > 0)
            return false;

        if (emailAddress.indexOf("&") > 0)
            return false;

        if (emailAddress.indexOf("*") > 0)
            return false;

        if (emailAddress.indexOf("+") > 0)
            return false;

        if (emailAddress.indexOf("-") > 0)
            return false;

        if (emailAddress.indexOf("~") > 0)
            return false;

        if (emailAddress.indexOf("ä") > 0)
            return false;

        if (emailAddress.indexOf("ö") > 0)
            return false;

        if (emailAddress.indexOf("å") > 0)
            return false;

        if (emailAddress.indexOf(";") > 0)
            return false;

        return true;
    }

 

Dan found this attempt in his company's PHP-based application.

if(ereg("^([a]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([b]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([c]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([d]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([e]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([f]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([g]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([h]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([i]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([j]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([k]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([l]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([m]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([n]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([o]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([p]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([q]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([r]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([s]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([t]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([u]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([v]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([w]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([x]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([y]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";
if(ereg("^([z]{2,60})([@])([A-Za-z0-9\.|-|_]{1,60})(\.)([A-Za-z]{2,5})$", $email))
	return "CHAIN";