001 // Copyright (c) 2001 Hursh Jain (http://www.mollypages.org) 002 // The Molly framework is freely distributable under the terms of an 003 // MIT-style license. For details, see the molly pages web site at: 004 // http://www.mollypages.org/. Use, modify, have fun ! 005 006 package fc.web.forms; 007 008 import javax.servlet.*; 009 import javax.servlet.http.*; 010 import java.io.*; 011 import java.util.*; 012 import java.util.regex.*; 013 014 import fc.jdbc.*; 015 import fc.io.*; 016 import fc.util.*; 017 018 /** 019 Validates a email address 020 021 @author hursh jain 022 **/ 023 public final class VEmail extends FieldValidator 024 { 025 boolean allowEmpty; 026 027 /** 028 Constructs a new email validator that does not allow empty 029 email address as valid 030 **/ 031 public VEmail(AbstractText field, String errorMessage) 032 { 033 this(field, errorMessage, false); 034 } 035 036 /** 037 Constructs a new email validator that allows an empty email 038 address as valid if the <tt>allowEmpty</tt> argument is 039 <tt>true</tt>. This is useful for optional email fields. 040 **/ 041 public VEmail(AbstractText field, String errorMessage, boolean allowEmpty) 042 { 043 super(field, errorMessage); 044 this.allowEmpty = allowEmpty; 045 } 046 047 //all top level domains are at least 2 chars 048 final static Pattern EmailPattern = Pattern.compile(".+@.+\\..+"); 049 050 /** 051 Works with any field that returns a String via it's {@link Field#getValue} method. 052 053 @throws ClassCastException If the field's {@link Field#getValue} method 054 does not return a String 055 **/ 056 public boolean validate(FormData fd, HttpServletRequest req) 057 { 058 String val = ((AbstractText)field).getValue(fd); 059 060 //val == null different from an empty string 061 if (val == null) 062 return false; 063 064 if (allowEmpty && val.equals("")) 065 return true; 066 067 Matcher matcher = EmailPattern.matcher(val); 068 boolean valid = matcher.matches(); 069 return valid; 070 } 071 072 } //~class VEmail 073