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";