View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  package org.apache.commons.validator;
    18
    19  import java.io.Serializable;
    20  import java.util.Locale;
    21
    22  import org.apache.oro.text.perl.Perl5Util;
    23
    24  /***
    25   * This class contains basic methods for performing validations.
    26   *
    27   * @version $Revision: 478334 $ $Date: 2006-11-22 21:31:54 +0000 (Wed, 22 Nov 2006) $
    28   */
    29  public class GenericValidator implements Serializable {
    30
    31      /***
    32       * UrlValidator used in wrapper method.
    33       */
    34      private static final UrlValidator URL_VALIDATOR = new UrlValidator();
    35
    36      /***
    37       * CreditCardValidator used in wrapper method.
    38       */
    39      private static final CreditCardValidator CREDIT_CARD_VALIDATOR =
    40          new CreditCardValidator();
    41
    42      /***
    43       * <p>Checks if the field isn't null and length of the field is greater
    44       * than zero not including whitespace.</p>
    45       *
    46       * @param value The value validation is being performed on.
    47       * @return true if blank or null.
    48       */
    49      public static boolean isBlankOrNull(String value) {
    50          return ((value == null) || (value.trim().length() == 0));
    51      }
    52
    53      /***
    54       * <p>Checks if the value matches the regular expression.</p>
    55       *
    56       * @param value The value validation is being performed on.
    57       * @param regexp The regular expression.
    58       * @return true if matches the regular expression.
    59       */
    60      public static boolean matchRegexp(String value, String regexp) {
    61          if (regexp == null || regexp.length() <= 0) {
    62              return false;
    63          }
    64
    65          Perl5Util matcher = new Perl5Util();
    66          return matcher.match("/" + regexp + "/", value);
    67      }
    68
    69      /***
    70       * <p>Checks if the value can safely be converted to a byte primitive.</p>
    71       *
    72       * @param value The value validation is being performed on.
    73       * @return true if the value can be converted to a Byte.
    74       */
    75      public static boolean isByte(String value) {
    76          return (GenericTypeValidator.formatByte(value) != null);
    77      }
    78
    79      /***
    80       * <p>Checks if the value can safely be converted to a short primitive.</p>
    81       *
    82       * @param value The value validation is being performed on.
    83       * @return true if the value can be converted to a Short.
    84       */
    85      public static boolean isShort(String value) {
    86          return (GenericTypeValidator.formatShort(value) != null);
    87      }
    88
    89      /***
    90       * <p>Checks if the value can safely be converted to a int primitive.</p>
    91       *
    92       * @param value The value validation is being performed on.
    93       * @return true if the value can be converted to an Integer.
    94       */
    95      public static boolean isInt(String value) {
    96          return (GenericTypeValidator.formatInt(value) != null);
    97      }
    98
    99      /***
    100      * <p>Checks if the value can safely be converted to a long primitive.</p>
    101      *
    102      * @param value The value validation is being performed on.
    103      * @return true if the value can be converted to a Long.
    104      */
    105     public static boolean isLong(String value) {
    106         return (GenericTypeValidator.formatLong(value) != null);
    107     }
    108
    109     /***
    110      * <p>Checks if the value can safely be converted to a float primitive.</p>
    111      *
    112      * @param value The value validation is being performed on.
    113      * @return true if the value can be converted to a Float.
    114      */
    115     public static boolean isFloat(String value) {
    116         return (GenericTypeValidator.formatFloat(value) != null);
    117     }
    118
    119     /***
    120      * <p>Checks if the value can safely be converted to a double primitive.</p>
    121      *
    122      * @param value The value validation is being performed on.
    123      * @return true if the value can be converted to a Double.
    124      */
    125     public static boolean isDouble(String value) {
    126         return (GenericTypeValidator.formatDouble(value) != null);
    127     }
    128
    129     /***
    130      * <p>Checks if the field is a valid date.  The <code>Locale</code> is
    131      * used with <code>java.text.DateFormat</code>.  The setLenient method
    132      * is set to <code>false</code> for all.</p>
    133      *
    134      * @param value The value validation is being performed on.
    135      * @param locale The locale to use for the date format, defaults to the
    136      * system default if null.
    137      * @return true if the value can be converted to a Date.
    138      */
    139     public static boolean isDate(String value, Locale locale) {
    140         return DateValidator.getInstance().isValid(value, locale);
    141     }
    142
    143     /***
    144      * <p>Checks if the field is a valid date.  The pattern is used with
    145      * <code>java.text.SimpleDateFormat</code>.  If strict is true, then the
    146      * length will be checked so '2/12/1999' will not pass validation with
    147      * the format 'MM/dd/yyyy' because the month isn't two digits.
    148      * The setLenient method is set to <code>false</code> for all.</p>
    149      *
    150      * @param value The value validation is being performed on.
    151      * @param datePattern The pattern passed to <code>SimpleDateFormat</code>.
    152      * @param strict Whether or not to have an exact match of the datePattern.
    153      * @return true if the value can be converted to a Date.
    154      */
    155     public static boolean isDate(String value, String datePattern, boolean strict) {
    156         return DateValidator.getInstance().isValid(value, datePattern, strict);
    157     }
    158
    159     /***
    160     * <p>Checks if a value is within a range (min &amp; max specified
    161     * in the vars attribute).</p>
    162     *
    163     * @param value The value validation is being performed on.
    164     * @param min The minimum value of the range.
    165     * @param max The maximum value of the range.
    166      * @return true if the value is in the specified range.
    167     */
    168     public static boolean isInRange(byte value, byte min, byte max) {
    169         return ((value >= min) && (value <= max));
    170     }
    171
    172     /***
    173      * <p>Checks if a value is within a range (min &amp; max specified
    174      * in the vars attribute).</p>
    175      *
    176      * @param value The value validation is being performed on.
    177      * @param min The minimum value of the range.
    178      * @param max The maximum value of the range.
    179      * @return true if the value is in the specified range.
    180      */
    181     public static boolean isInRange(int value, int min, int max) {
    182         return ((value >= min) && (value <= max));
    183     }
    184
    185     /***
    186      * <p>Checks if a value is within a range (min &amp; max specified
    187      * in the vars attribute).</p>
    188      *
    189      * @param value The value validation is being performed on.
    190      * @param min The minimum value of the range.
    191      * @param max The maximum value of the range.
    192      * @return true if the value is in the specified range.
    193      */
    194     public static boolean isInRange(float value, float min, float max) {
    195         return ((value >= min) && (value <= max));
    196     }
    197
    198     /***
    199      * <p>Checks if a value is within a range (min &amp; max specified
    200      * in the vars attribute).</p>
    201      *
    202      * @param value The value validation is being performed on.
    203      * @param min The minimum value of the range.
    204      * @param max The maximum value of the range.
    205      * @return true if the value is in the specified range.
    206      */
    207     public static boolean isInRange(short value, short min, short max) {
    208         return ((value >= min) && (value <= max));
    209     }
    210
    211     /***
    212      * <p>Checks if a value is within a range (min &amp; max specified
    213      * in the vars attribute).</p>
    214      *
    215      * @param value The value validation is being performed on.
    216      * @param min The minimum value of the range.
    217      * @param max The maximum value of the range.
    218      * @return true if the value is in the specified range.
    219      */
    220     public static boolean isInRange(long value, long min, long max) {
    221         return ((value >= min) && (value <= max));
    222     }
    223
    224     /***
    225      * <p>Checks if a value is within a range (min &amp; max specified
    226      * in the vars attribute).</p>
    227      *
    228      * @param value The value validation is being performed on.
    229      * @param min The minimum value of the range.
    230      * @param max The maximum value of the range.
    231      * @return true if the value is in the specified range.
    232      */
    233     public static boolean isInRange(double value, double min, double max) {
    234         return ((value >= min) && (value <= max));
    235     }
    236
    237     /***
    238      * Checks if the field is a valid credit card number.
    239      * @param value The value validation is being performed on.
    240      * @return true if the value is valid Credit Card Number.
    241      */
    242     public static boolean isCreditCard(String value) {
    243         return CREDIT_CARD_VALIDATOR.isValid(value);
    244     }
    245
    246     /***
    247      * <p>Checks if a field has a valid e-mail address.</p>
    248      *
    249      * @param value The value validation is being performed on.
    250      * @return true if the value is valid Email Address.
    251      */
    252     public static boolean isEmail(String value) {
    253         return EmailValidator.getInstance().isValid(value);
    254     }
    255
    256     /***
    257      * <p>Checks if a field is a valid url address.</p>
    258      * If you need to modify what is considered valid then
    259      * consider using the UrlValidator directly.
    260      *
    261      * @param value The value validation is being performed on.
    262      * @return true if the value is valid Url.
    263      */
    264     public static boolean isUrl(String value) {
    265         return URL_VALIDATOR.isValid(value);
    266     }
    267
    268     /***
    269      * <p>Checks if the value's length is less than or equal to the max.</p>
    270      *
    271      * @param value The value validation is being performed on.
    272      * @param max The maximum length.
    273      * @return true if the value's length is less than the specified maximum.
    274      */
    275     public static boolean maxLength(String value, int max) {
    276         return (value.length() <= max);
    277     }
    278
    279     /***
    280      * <p>Checks if the value's adjusted length is less than or equal to the max.</p>
    281      *
    282      * @param value The value validation is being performed on.
    283      * @param max The maximum length.
    284      * @param lineEndLength The length to use for line endings.
    285      * @return true if the value's length is less than the specified maximum.
    286      */
    287     public static boolean maxLength(String value, int max, int lineEndLength) {
    288         int adjustAmount = adjustForLineEnding(value, lineEndLength);
    289         return ((value.length() + adjustAmount) <= max);
    290     }
    291
    292     /***
    293      * <p>Checks if the value's length is greater than or equal to the min.</p>
    294      *
    295      * @param value The value validation is being performed on.
    296      * @param min The minimum length.
    297      * @return true if the value's length is more than the specified minimum.
    298      */
    299     public static boolean minLength(String value, int min) {
    300         return (value.length() >= min);
    301     }
    302
    303     /***
    304      * <p>Checks if the value's adjusted length is greater than or equal to the min.</p>
    305      *
    306      * @param value The value validation is being performed on.
    307      * @param min The minimum length.
    308      * @param lineEndLength The length to use for line endings.
    309      * @return true if the value's length is more than the specified minimum.
    310      */
    311     public static boolean minLength(String value, int min, int lineEndLength) {
    312         int adjustAmount = adjustForLineEnding(value, lineEndLength);
    313         return ((value.length() + adjustAmount) >= min);
    314     }
    315
    316     /***
    317      * Calculate an adjustment amount for line endings.
    318      *
    319      * See Bug 37962 for the rational behind this.
    320      *
    321      * @param value The value validation is being performed on.
    322      * @param lineEndLength The length to use for line endings.
    323      * @return the adjustment amount.
    324      */
    325     private static int adjustForLineEnding(String value, int lineEndLength) {
    326         int nCount = 0;
    327         int rCount = 0;
    328         for (int i = 0; i < value.length(); i++) {
    329             if (value.charAt(i) == '\n') {
    330                 nCount++;
    331             }
    332             if (value.charAt(i) == '\r') {
    333                 rCount++;
    334             }
    335         }
    336         return ((nCount * lineEndLength) - (rCount + nCount));
    337     }
    338
    339     // See http://issues.apache.org/bugzilla/show_bug.cgi?id=29015 WRT the "value" methods
    340
    341     /***
    342      * <p>Checks if the value is greater than or equal to the min.</p>
    343      *
    344      * @param value The value validation is being performed on.
    345      * @param min The minimum numeric value.
    346      * @return true if the value is &gt;= the specified minimum.
    347      */
    348     public static boolean minValue(int value, int min) {
    349         return (value >= min);
    350     }
    351
    352     /***
    353      * <p>Checks if the value is greater than or equal to the min.</p>
    354      *
    355      * @param value The value validation is being performed on.
    356      * @param min The minimum numeric value.
    357      * @return true if the value is &gt;= the specified minimum.
    358      */
    359     public static boolean minValue(long value, long min) {
    360         return (value >= min);
    361     }
    362
    363     /***
    364      * <p>Checks if the value is greater than or equal to the min.</p>
    365      *
    366      * @param value The value validation is being performed on.
    367      * @param min The minimum numeric value.
    368      * @return true if the value is &gt;= the specified minimum.
    369      */
    370     public static boolean minValue(double value, double min) {
    371         return (value >= min);
    372     }
    373
    374     /***
    375      * <p>Checks if the value is greater than or equal to the min.</p>
    376      *
    377      * @param value The value validation is being performed on.
    378      * @param min The minimum numeric value.
    379      * @return true if the value is &gt;= the specified minimum.
    380      */
    381     public static boolean minValue(float value, float min) {
    382         return (value >= min);
    383     }
    384
    385     /***
    386      * <p>Checks if the value is less than or equal to the max.</p>
    387      *
    388      * @param value The value validation is being performed on.
    389      * @param max The maximum numeric value.
    390      * @return true if the value is &lt;= the specified maximum.
    391      */
    392     public static boolean maxValue(int value, int max) {
    393         return (value <= max);
    394     }
    395
    396     /***
    397      * <p>Checks if the value is less than or equal to the max.</p>
    398      *
    399      * @param value The value validation is being performed on.
    400      * @param max The maximum numeric value.
    401      * @return true if the value is &lt;= the specified maximum.
    402      */
    403     public static boolean maxValue(long value, long max) {
    404         return (value <= max);
    405     }
    406
    407     /***
    408      * <p>Checks if the value is less than or equal to the max.</p>
    409      *
    410      * @param value The value validation is being performed on.
    411      * @param max The maximum numeric value.
    412      * @return true if the value is &lt;= the specified maximum.
    413      */
    414     public static boolean maxValue(double value, double max) {
    415         return (value <= max);
    416     }
    417
    418     /***
    419      * <p>Checks if the value is less than or equal to the max.</p>
    420      *
    421      * @param value The value validation is being performed on.
    422      * @param max The maximum numeric value.
    423      * @return true if the value is &lt;= the specified maximum.
    424      */
    425     public static boolean maxValue(float value, float max) {
    426         return (value <= max);
    427     }
    428
    429 }