Validating emails, urls and date using Java API
Recently I was looking for a programmatic way for validating data against well known validation e.g. email and date. I have to use them inside custom validator and sometimes in controller/action. Creating Command objects for validating was not suitable in my case(overkilling solution). Writing/looking for regular expression was another solution. I found a special class GenericValidator
in org.apache.commons.validator
package (commons-validator
jar file, bundled with grails jars) . The class has many useful static
methods for validating data. e.g. for validating email, url, credit card, date etc. Here is the sample code for validation using GenericValidator
class:
[groovy]
import org.apache.commons.validator.GenericValidator
assert GenericValidator.isEmail("bhagwat@intelligrape.com") //valid email
assert !GenericValidator.isEmail("bhagwatintelligrape.com") // invalid email
assert GenericValidator.isUrl("http://www.intelligrape.com") //valid URL
assert !GenericValidator.isUrl("www.intelligrape.com") //invalid URL
assert GenericValidator.isCreditCard("4111111111111111") // valid visa card number
assert !GenericValidator.isCreditCard("4111111111111112") // invalid visa card number
assert GenericValidator.isDate("2011-12-30", "yyyy-MM-dd", true) // valid date(last argument for checking strict)
assert GenericValidator.isDate("2011-02-28", "yyyy-MM-dd", true) // valid date – 28th Feb
assert !GenericValidator.isDate("2011-02-29", "yyyy-MM-dd", false) // invalid date – 29th Feb 2011
[/groovy]
For other useful methods and their details follow the link :
http://commons.apache.org/validator/apidocs/org/apache/commons/validator/GenericValidator.html.
In addition to GennericValdator
class there are separate classes for validating date, email, credit card, ISBN validator in the org.apache.commons.validator package
viz. DateValidator, CreditCardValidator, EmailValidator, ISBNValidator, UrlValidator and so on. Here is the sample code for using DateValidator
class.
[groovy]
import org.apache.commons.validator.DateValidator
DateValidator dateValidator=DateValidator.getInstance()
assert dateValidator.isValid("11-02-28", "yy-MM-dd", true)
assert !dateValidator.isValid("11-02-29", "yy-MM-dd", true)
[/groovy]
Hope it helps you.
Bhagwat Kumar
bhagwat(at)intelligrape(dot)com
Great, exactly what i needed. Groovy is that kind of nice…
Thanks for sharing.
It helped me a lot…:)
Useful stuff.
Obviously you can use built-in validations inside “static constraints” in domain/command objects. As I have mentioned clearly my situation was something different i.e. to be able to use them outside the “static constraints”.
That’s useful information. Weren’t the built-in grails validations good enough?