| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.commons.validator; |
| |
| import java.io.Serializable; |
| import java.util.Locale; |
| import java.util.regex.Pattern; |
| |
| import org.apache.commons.validator.routines.CreditCardValidator; |
| import org.apache.commons.validator.routines.DateValidator; |
| import org.apache.commons.validator.routines.EmailValidator; |
| import org.apache.commons.validator.routines.UrlValidator; |
| |
| /** |
| * This class contains basic methods for performing validations. |
| */ |
| public class GenericValidator implements Serializable { |
| |
| private static final long serialVersionUID = -7212095066891517618L; |
| |
| /** |
| * UrlValidator used in wrapper method. |
| */ |
| private static final UrlValidator URL_VALIDATOR = new UrlValidator(); |
| |
| /** |
| * CreditCardValidator used in wrapper method. |
| */ |
| private static final CreditCardValidator CREDIT_CARD_VALIDATOR = new CreditCardValidator(); |
| |
| /** |
| * Calculate an adjustment amount for line endings. |
| * |
| * See Bug 37962 for the rational behind this. |
| * |
| * @param value The value validation is being performed on. |
| * @param lineEndLength The length to use for line endings. |
| * @return the adjustment amount. |
| */ |
| private static int adjustForLineEnding(final String value, final int lineEndLength) { |
| int nCount = 0; |
| int rCount = 0; |
| for (int i = 0; i < value.length(); i++) { |
| if (value.charAt(i) == '\n') { |
| nCount++; |
| } |
| if (value.charAt(i) == '\r') { |
| rCount++; |
| } |
| } |
| final int rnCount = rCount + nCount; |
| return nCount * lineEndLength - rnCount; |
| } |
| |
| /** |
| * <p>Checks if the field isn't null and length of the field is greater |
| * than zero not including whitespace.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if blank or null. |
| */ |
| public static boolean isBlankOrNull(final String value) { |
| // Don't trim is already empty. |
| return value == null || value.isEmpty() || value.trim().isEmpty(); |
| } |
| |
| /** |
| * <p>Checks if the value can safely be converted to a byte primitive.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value can be converted to a Byte. |
| */ |
| public static boolean isByte(final String value) { |
| return GenericTypeValidator.formatByte(value) != null; |
| } |
| |
| /** |
| * Checks if the field is a valid credit card number. |
| * @param value The value validation is being performed on. |
| * @return true if the value is valid Credit Card Number. |
| */ |
| public static boolean isCreditCard(final String value) { |
| return CREDIT_CARD_VALIDATOR.isValid(value); |
| } |
| |
| /** |
| * <p>Checks if the field is a valid date. The <code>Locale</code> is |
| * used with <code>java.text.DateFormat</code>. The setLenient method |
| * is set to {@code false} for all.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param locale The locale to use for the date format, defaults to the |
| * system default if null. |
| * @return true if the value can be converted to a Date. |
| */ |
| public static boolean isDate(final String value, final Locale locale) { |
| return DateValidator.getInstance().isValid(value, locale); |
| } |
| |
| /** |
| * <p>Checks if the field is a valid date. The pattern is used with |
| * <code>java.text.SimpleDateFormat</code>. If strict is true, then the |
| * length will be checked so '2/12/1999' will not pass validation with |
| * the format 'MM/dd/yyyy' because the month isn't two digits. |
| * The setLenient method is set to {@code false} for all.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param datePattern The pattern passed to <code>SimpleDateFormat</code>. |
| * @param strict Whether or not to have an exact match of the datePattern. |
| * @return true if the value can be converted to a Date. |
| */ |
| public static boolean isDate(final String value, final String datePattern, final boolean strict) { |
| // TODO method isValid() not yet supported in routines version |
| return org.apache.commons.validator.DateValidator.getInstance().isValid(value, datePattern, strict); |
| } |
| |
| /** |
| * <p>Checks if the value can safely be converted to a double primitive.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value can be converted to a Double. |
| */ |
| public static boolean isDouble(final String value) { |
| return GenericTypeValidator.formatDouble(value) != null; |
| } |
| |
| /** |
| * <p>Checks if a field has a valid e-mail address.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value is valid Email Address. |
| */ |
| public static boolean isEmail(final String value) { |
| return EmailValidator.getInstance().isValid(value); |
| } |
| |
| /** |
| * <p>Checks if the value can safely be converted to a float primitive.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value can be converted to a Float. |
| */ |
| public static boolean isFloat(final String value) { |
| return GenericTypeValidator.formatFloat(value) != null; |
| } |
| |
| /** |
| * <p>Checks if a value is within a range (min & max specified |
| * in the vars attribute).</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum value of the range. |
| * @param max The maximum value of the range. |
| * @return true if the value is in the specified range. |
| */ |
| public static boolean isInRange(final byte value, final byte min, final byte max) { |
| return value >= min && value <= max; |
| } |
| |
| /** |
| * <p>Checks if a value is within a range (min & max specified |
| * in the vars attribute).</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum value of the range. |
| * @param max The maximum value of the range. |
| * @return true if the value is in the specified range. |
| */ |
| public static boolean isInRange(final double value, final double min, final double max) { |
| return value >= min && value <= max; |
| } |
| |
| /** |
| * <p>Checks if a value is within a range (min & max specified |
| * in the vars attribute).</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum value of the range. |
| * @param max The maximum value of the range. |
| * @return true if the value is in the specified range. |
| */ |
| public static boolean isInRange(final float value, final float min, final float max) { |
| return value >= min && value <= max; |
| } |
| |
| /** |
| * <p>Checks if a value is within a range (min & max specified |
| * in the vars attribute).</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum value of the range. |
| * @param max The maximum value of the range. |
| * @return true if the value is in the specified range. |
| */ |
| public static boolean isInRange(final int value, final int min, final int max) { |
| return value >= min && value <= max; |
| } |
| |
| /** |
| * <p>Checks if a value is within a range (min & max specified |
| * in the vars attribute).</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum value of the range. |
| * @param max The maximum value of the range. |
| * @return true if the value is in the specified range. |
| */ |
| public static boolean isInRange(final long value, final long min, final long max) { |
| return value >= min && value <= max; |
| } |
| |
| /** |
| * <p>Checks if a value is within a range (min & max specified |
| * in the vars attribute).</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum value of the range. |
| * @param max The maximum value of the range. |
| * @return true if the value is in the specified range. |
| */ |
| public static boolean isInRange(final short value, final short min, final short max) { |
| return value >= min && value <= max; |
| } |
| |
| /** |
| * <p>Checks if the value can safely be converted to a int primitive.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value can be converted to an Integer. |
| */ |
| public static boolean isInt(final String value) { |
| return GenericTypeValidator.formatInt(value) != null; |
| } |
| |
| /** |
| * <p>Checks if the value can safely be converted to a long primitive.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value can be converted to a Long. |
| */ |
| public static boolean isLong(final String value) { |
| return GenericTypeValidator.formatLong(value) != null; |
| } |
| |
| /** |
| * <p>Checks if the value can safely be converted to a short primitive.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value can be converted to a Short. |
| */ |
| public static boolean isShort(final String value) { |
| return GenericTypeValidator.formatShort(value) != null; |
| } |
| |
| /** |
| * <p>Checks if a field is a valid URL address.</p> |
| * If you need to modify what is considered valid then |
| * consider using the UrlValidator directly. |
| * |
| * @param value The value validation is being performed on. |
| * @return true if the value is valid Url. |
| */ |
| public static boolean isUrl(final String value) { |
| return URL_VALIDATOR.isValid(value); |
| } |
| |
| /** |
| * <p>Checks if the value matches the regular expression.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param regexp The regular expression. |
| * @return true if matches the regular expression. |
| */ |
| public static boolean matchRegexp(final String value, final String regexp) { |
| if (regexp == null || regexp.isEmpty()) { |
| return false; |
| } |
| |
| return Pattern.matches(regexp, value); |
| } |
| |
| /** |
| * <p>Checks if the value's length is less than or equal to the max.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param max The maximum length. |
| * @return true if the value's length is less than the specified maximum. |
| */ |
| public static boolean maxLength(final String value, final int max) { |
| return value.length() <= max; |
| } |
| |
| /** |
| * <p>Checks if the value's adjusted length is less than or equal to the max.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param max The maximum length. |
| * @param lineEndLength The length to use for line endings. |
| * @return true if the value's length is less than the specified maximum. |
| */ |
| public static boolean maxLength(final String value, final int max, final int lineEndLength) { |
| final int adjustAmount = adjustForLineEnding(value, lineEndLength); |
| return value.length() + adjustAmount <= max; |
| } |
| |
| /** |
| * <p>Checks if the value is less than or equal to the max.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param max The maximum numeric value. |
| * @return true if the value is <= the specified maximum. |
| */ |
| public static boolean maxValue(final double value, final double max) { |
| return value <= max; |
| } |
| |
| /** |
| * <p>Checks if the value is less than or equal to the max.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param max The maximum numeric value. |
| * @return true if the value is <= the specified maximum. |
| */ |
| public static boolean maxValue(final float value, final float max) { |
| return value <= max; |
| } |
| |
| // See https://issues.apache.org/bugzilla/show_bug.cgi?id=29015 WRT the "value" methods |
| |
| /** |
| * <p>Checks if the value is less than or equal to the max.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param max The maximum numeric value. |
| * @return true if the value is <= the specified maximum. |
| */ |
| public static boolean maxValue(final int value, final int max) { |
| return value <= max; |
| } |
| |
| /** |
| * <p>Checks if the value is less than or equal to the max.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param max The maximum numeric value. |
| * @return true if the value is <= the specified maximum. |
| */ |
| public static boolean maxValue(final long value, final long max) { |
| return value <= max; |
| } |
| |
| /** |
| * <p>Checks if the value's length is greater than or equal to the min.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum length. |
| * @return true if the value's length is more than the specified minimum. |
| */ |
| public static boolean minLength(final String value, final int min) { |
| return value.length() >= min; |
| } |
| |
| /** |
| * <p>Checks if the value's adjusted length is greater than or equal to the min.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum length. |
| * @param lineEndLength The length to use for line endings. |
| * @return true if the value's length is more than the specified minimum. |
| */ |
| public static boolean minLength(final String value, final int min, final int lineEndLength) { |
| final int adjustAmount = adjustForLineEnding(value, lineEndLength); |
| return value.length() + adjustAmount >= min; |
| } |
| |
| /** |
| * <p>Checks if the value is greater than or equal to the min.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum numeric value. |
| * @return true if the value is >= the specified minimum. |
| */ |
| public static boolean minValue(final double value, final double min) { |
| return value >= min; |
| } |
| |
| /** |
| * <p>Checks if the value is greater than or equal to the min.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum numeric value. |
| * @return true if the value is >= the specified minimum. |
| */ |
| public static boolean minValue(final float value, final float min) { |
| return value >= min; |
| } |
| |
| /** |
| * <p>Checks if the value is greater than or equal to the min.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum numeric value. |
| * @return true if the value is >= the specified minimum. |
| */ |
| public static boolean minValue(final int value, final int min) { |
| return value >= min; |
| } |
| |
| /** |
| * <p>Checks if the value is greater than or equal to the min.</p> |
| * |
| * @param value The value validation is being performed on. |
| * @param min The minimum numeric value. |
| * @return true if the value is >= the specified minimum. |
| */ |
| public static boolean minValue(final long value, final long min) { |
| return value >= min; |
| } |
| |
| } |