package org.tessell.model.validation.rules; /** Validates that a property matches a regex. */ public class Regex extends AbstractRule<String> { private static final String urlScheme = "(http[s]?):\\/\\/"; private static final String urlDomain = "(([^:\\/\\s\"]+\\.)+([^:\\/\\s\"]{2,}))"; // foo.com, foo.bar.com private static final String urlPath = "(/[^#?\\s\"]*)?"; private static final String urlQuery = "(\\?[^#\\s\"]*)?"; private static final String urlHash = "(#[^\\s\"]*)?"; public static final String URL = "^" + urlScheme + urlDomain + urlPath + urlQuery + urlHash + "$"; public static final String DOMAIN = "^" + urlDomain + "$"; public static final String URL_NO_PROTOCOL = "^" + urlDomain + urlPath + urlQuery + urlHash + "$"; // http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/df9ebce869e9c39d public static final String EMAIL = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"; // numeric public static final String NUMERIC = "^[0-9]+$"; private final String regex; public Regex(final String message, final String regex) { super(message); this.regex = regex; } @Override protected boolean isValid() { final String value = property.get(); if (value == null) { return true; // defer to a Required rule } return value.matches(regex); } }