You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/03/19 20:31:36 UTC
[commons-validator] 02/04: Javadoc: Convert package.html to package-info.java
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-validator.git
commit 831202f33459f27eb67b99cae1f4bb33fdb10b2a
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Mar 19 16:31:18 2023 -0400
Javadoc: Convert package.html to package-info.java
---
.../commons/validator/routines/package-info.java | 741 ++++++++++++++++++
.../apache/commons/validator/routines/package.html | 835 ---------------------
2 files changed, 741 insertions(+), 835 deletions(-)
diff --git a/src/main/java/org/apache/commons/validator/routines/package-info.java b/src/main/java/org/apache/commons/validator/routines/package-info.java
new file mode 100644
index 00000000..5a2becc6
--- /dev/null
+++ b/src/main/java/org/apache/commons/validator/routines/package-info.java
@@ -0,0 +1,741 @@
+/*
+ * 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.
+ */
+
+/**
+ * This package contains <i>independent</i> validation routines.
+ * <h2>Table of Contents</h2>
+ * <ul>
+ * <li>1. <a href="#overview">Overview</a></li>
+ * <li>2. <a href="#date">Date and Time Validators</a>
+ * <ul>
+ * <li>2.1 <a href="#date.overview">Overview</a></li>
+ * <li>2.2 <a href="#date.validate">Validating a Date Value</a></li>
+ * <li>2.3 <a href="#date.format">Formatting</a></li>
+ * <li>2.4 <a href="#date.timezone">Time Zones</a></li>
+ * <li>2.5 <a href="#date.compare">Comparing Dates and Times</a></li>
+ * </ul>
+ * </li>
+ * <li>3. <a href="#numeric">Numeric Validators</a>
+ * <ul>
+ * <li>3.1 <a href="#numeric.overview">Overview</a></li>
+ * <li>3.2 <a href="#numeric.validate">Validating a Numeric Value</a></li>
+ * <li>3.3 <a href="#numeric.format">Formatting</a></li>
+ * <li>3.4 <a href="#numeric.compare">Comparing Numbers</a></li>
+ * <li>3.5 <a href="#numeric.currency">Currency Validation</a></li>
+ * <li>3.6 <a href="#numeric.percent">Percent Validation</a></li>
+ * </ul>
+ * </li>
+ * <li>4. <a href="#other">Other Validators</a>
+ * <ul>
+ * <li>4.1 <a href="#other.overview">Overview</a></li>
+ * <li>4.2 <a href="#other.regex">Regular Expression validation</a></li>
+ * <li>4.3 <a href="#other.checkdigit">Check Digit Validation/Calculation</a></li>
+ * <li>4.4 <a href="#other.code">General Code Validation</a></li>
+ * <li>4.5 <a href="#other.isbn">ISBN Validation</a></li>
+ * <li>4.6 <a href="#other.inet">IP Address Validation</a></li>
+ * <li>4.7 <a href="#other.email">Email Address Validation</a></li>
+ * <li>4.8 <a href="#other.url">URL Validation</a></li>
+ * <li>4.9 <a href="#other.domain">Domain Name Validation</a></li>
+ * </ul>
+ * </li>
+ * </ul>
+ * <a id="overview"></a>
+ * <h2>1. Overview</h2>
+ * <p>
+ * Commons Validator serves two purposes:
+ * </p>
+ * <ul>
+ * <li>To provide standard, independent validation routines/functions.</li>
+ * <li>To provide a <i>mini</i> framework for Validation.</li>
+ * </ul>
+ * <p>
+ * This package has been created, since version 1.3.0, in an attempt to clearly
+ * separate these two concerns and is the location for the standard, independent
+ * validation routines/functions in <em>Commons Validator</em>.
+ * </p>
+ * <p>
+ * The contents of this package have no dependencies on the framework aspect of
+ * Commons Validator and can be used on their own.
+ * </p>
+ * <a id="date"></a>
+ * <h2>2. Date and Time Validators</h2>
+ * <a id="date.overview"></a>
+ * <h2>2.1 Overview</h2>
+ * <p>
+ * The date and time validators either validate according to a specified <i>format</i>
+ * or use a standard <i>format</i> for a specified <code>Locale</code>.
+ * </p>
+ * <ul>
+ * <li><a href="DateValidator.html">Date Validator</a> - validates dates
+ * converting to a <code>java.util.Date</code> type.</li>
+ * <li><a href="CalendarValidator.html">Calendar Validator</a> - validates dates
+ * converting to a <code>java.util.Calendar</code> type.</li>
+ * <li><a href="TimeValidator.html">Time Validator</a> - validates times
+ * converting to a <code>java.util.Calendar</code> type.</li>
+ * </ul>
+ * <a id="date.validate"></a>
+ * <h2>2.2 Validating a Date Value</h2>
+ * <p>
+ * You can either use one of the <code>isValid()</code> methods to just determine
+ * if a date is valid, or use one of the <code>validate()</code> methods to
+ * validate a date and convert it to a <code>java.util.Date</code>...
+ * </p>
+ * <pre>
+ * // Get the Date validator
+ * DateValidator validator = DateValidator.getInstance();
+ * // Validate/Convert the date
+ * Date fooDate = validator.validate(fooString, "dd/MM/yyyy");
+ * if (fooDate == null) {
+ * // error...not a valid date
+ * return;
+ * }
+ * </pre>
+ * <p>The following methods are provided to validate a date/time (return a boolean result):
+ * </p>
+ * <ul>
+ * <li><code>isValid(<i>value</i>)</code></li>
+ * <li><code>isValid(<i>value</i>, <i>pattern</i>)</code></li>
+ * <li><code>isValid(<i>value</i>, Locale)</code></li>
+ * <li><code>isValid(<i>value</i>, <i>pattern</i>, Locale)</code></li>
+ * </ul>
+ * <p>The following methods are provided to validate a date/time and convert it to either a
+ * <code>java.util.Date</code> or <code>java.util.Calendar</code>:
+ * </p>
+ * <ul>
+ * <li><code>validate(<i>value</i>)</code></li>
+ * <li><code>validate(<i>value</i>, <i>pattern</i>)</code></li>
+ * <li><code>validate(<i>value</i>, Locale)</code></li>
+ * <li><code>validate(<i>value</i>, <i>pattern</i>, Locale)</code></li>
+ * </ul>
+ * <a id="date.format"></a>
+ * <h2>2.3 Formatting</h2>
+ * <p>
+ * Formatting and validating are two sides of the same coin. Typically
+ * <i>input</i> values which are converted from Strings according to a
+ * specified <i>format</i> also have to be rendered for <i>output</i> in
+ * the same format. These validators provide the mechanism for formatting from
+ * date/time objects to Strings. The following methods are provided to format
+ * date/time values as Strings:
+ * </p>
+ * <ul>
+ * <li><code>format(<i>date/calendar</i>)</code></li>
+ * <li><code>format(<i>date/calendar</i>, <i>pattern</i>)</code></li>
+ * <li><code>format(<i>date/calendar</i>, Locale)</code></li>
+ * <li><code>format(<i>date/calendar</i>, <i>pattern</i>, Locale)</code></li>
+ * </ul>
+ * <a id="date.timezone"></a>
+ * <h2>2.4 Time Zones</h2>
+ * <p>
+ * If the date being parsed relates to a different time zone than the
+ * system default, you can specify the <code>TimeZone</code> to use when
+ * validating/converting:
+ * </p>
+ * <pre>
+ * // Get the GMT time zone
+ * TimeZone GMT = TimeZone.getInstance("GMT");
+ * // Validate/Convert the date using GMT
+ * Date fooDate = validator.validate(fooString, "dd/MM/yyyy", GMT);
+ * </pre>
+ * <p>The following Time Zone <i>flavours</i> of the Validation/Conversion methods
+ * are provided:</p>
+ * <ul>
+ * <li><code>validate(<i>value</i>, TimeZone)</code></li>
+ * <li><code>validate(<i>value</i>, <i>pattern</i>, TimeZone)</code></li>
+ * <li><code>validate(<i>value</i>, Locale, TimeZone)</code></li>
+ * <li><code>validate(<i>value</i>, <i>pattern</i>, Locale, TimeZone)</code></li>
+ * </ul>
+ * <a id="date.compare"></a>
+ * <h2>2.5 Comparing Dates and Times</h2>
+ * <p>
+ * As well as validating that a value is a valid date or time, these validators
+ * also provide <i>date comparison</i> functions. The <code>DateValidator</code>
+ * and <code>CalendarValidator</code> provide functions for comparing years,
+ * quarters, months, weeks and dates and the <code>TimeValidator</code> provides
+ * functions for comparing hours, minutes, seconds and milliseconds.
+ * For example, to check that a date is in the current month, you could use
+ * the <code>compareMonths()</code> method, which compares the year and month
+ * components of a date:
+ * </p>
+ * <pre>
+ * // Check if the date is in the current month
+ * int compare = validator.compareMonths(fooDate, new Date(), null);
+ * if (compare == 0) {
+ * // do current month processing
+ * return;
+ * }
+ * // Check if the date is in the previous quarter
+ * compare = validator.compareQuarters(fooDate, new Date(), null);
+ * if (compare < 0) {
+ * // do previous quarter processing
+ * return;
+ * }
+ * // Check if the date is in the next year
+ * compare = validator.compareYears(fooDate, new Date(), null);
+ * if (compare > 0) {
+ * // do next year processing
+ * return;
+ * }
+ * </pre>
+ * <a id="numeric"></a>
+ * <h2>3 Numeric Validators</h2>
+ * <a id="numeric.overview"></a>
+ * <h2>3.1 Overview</h2>
+ * <p>
+ * The numeric validators either validate according to a specified <i>format</i>
+ * or use a standard <i>format</i> for a specified <code>Locale</code> or use
+ * a <i>custom</i> format for a specified <code>Locale</code>.
+ * </p>
+ * <ul>
+ * <li><a href="ByteValidator.html">Byte Validator</a> - validates numbers
+ * converting to a <code>java.lang.Byte</code> type.</li>
+ * <li><a href="ShortValidator.html">Short Validator</a> - validates numbers
+ * converting to a <code>java.lang.Short</code> type.</li>
+ * <li><a href="IntegerValidator.html">Integer Validator</a> - validates numbers
+ * converting to a <code>java.lang.Integer</code> type.</li>
+ * <li><a href="LongValidator.html">Long Validator</a> - validates numbers
+ * converting to a <code>java.lang.Long</code> type.</li>
+ * <li><a href="FloatValidator.html">Float Validator</a> - validates numbers
+ * converting to a <code>java.lang.Float</code> type.</li>
+ * <li><a href="DoubleValidator.html">Double Validator</a> - validates numbers
+ * converting to a <code>java.lang.Double</code> type.</li>
+ * <li><a href="BigIntegerValidator.html">BigInteger Validator</a> - validates numbers
+ * converting to a <code>java.math.BigInteger</code> type.</li>
+ * <li><a href="BigDecimalValidator.html">BigDecimal Validator</a> - validates numbers
+ * converting to a <code>java.math.BigDecimal</code> type.</li>
+ * </ul>
+ * <a id="numeric.validate"></a>
+ * <h2>3.2 Validating a Numeric Value</h2>
+ * <p>
+ * You can either use one of the <code>isValid()</code> methods to just determine
+ * if a number is valid, or use one of the <code>validate()</code> methods to
+ * validate a number and convert it to an appropriate type.
+ * </p>
+ * <p>
+ * The following example validates an integer against a custom pattern
+ * for the <i>German</i> locale. Please note the format is specified using
+ * the standard symbols for <code>java.text.DecimalFormat</code> so although
+ * the decimal separator is indicated as a period (".") in the format, the
+ * validator will check using the German decimal separator - which is a comma (",").
+ * </p>
+ * <pre>
+ * // Get the Integer validator
+ * IntegerValidator validator = IntegerValidator.getInstance();
+ * // Validate/Convert the number
+ * Integer fooInteger = validator.validate(fooString, "#,##0.00", Locale.GERMAN);
+ * if (fooInteger == null) {
+ * // error...not a valid Integer
+ * return;
+ * }
+ * </pre>
+ * <p>The following methods are provided to validate a number (return a boolean result):</p>
+ * <ul>
+ * <li><code>isValid(<i>value</i>)</code></li>
+ * <li><code>isValid(<i>value</i>, <i>pattern</i>)</code></li>
+ * <li><code>isValid(<i>value</i>, Locale)</code></li>
+ * <li><code>isValid(<i>value</i>, <i>pattern</i>, Locale)</code></li>
+ * </ul>
+ * <p>The following methods are provided to validate a number and convert it one of
+ * the <code>java.lang.Number</code> implementations:</p>
+ * <ul>
+ * <li><code>validate(<i>value</i>)</code></li>
+ * <li><code>validate(<i>value</i>, <i>pattern</i>)</code></li>
+ * <li><code>validate(<i>value</i>, Locale)</code></li>
+ * <li><code>validate(<i>value</i>, <i>pattern</i>, Locale)</code></li>
+ * </ul>
+ * <a id="numeric.format"></a>
+ * <h2>3.3 Formatting</h2>
+ * <p>
+ * Formatting and validating are two sides of the same coin. Typically
+ * <i>input</i> values which are converted from Strings according to a
+ * specified <i>format</i> also have to be rendered for <i>output</i> in
+ * the same format. These validators provide the mechanism for formatting from
+ * numeric objects to Strings. The following methods are provided to format
+ * numeric values as Strings:
+ * </p>
+ * <ul>
+ * <li><code>format(<i>number</i>)</code></li>
+ * <li><code>format(<i>number</i>, <i>pattern</i>)</code></li>
+ * <li><code>format(<i>number</i>, Locale)</code></li>
+ * <li><code>format(<i>number</i>, <i>pattern</i>, Locale)</code></li>
+ * </ul>
+ * <a id="numeric.compare"></a>
+ * <h2>3.4 Comparing Numbers</h2>
+ * <p>
+ * As well as validating that a value is a valid number, these validators
+ * also provide functions for validating the <i>minimum</i>, <i>maximum</i>
+ * and <i>range</i> of a value.
+ * </p>
+ * <pre>
+ * // Check the number is between 25 and 75
+ * if (validator.isInRange(fooInteger, 25, 75) {
+ * // valid...in the specified range
+ * return;
+ * }
+ * </pre>
+ * <a id="numeric.currency"></a>
+ * <h2>3.5 Currency Validation</h2>
+ * <p>
+ * A default <a href="CurrencyValidator.html">Currency Validator</a>
+ * implementation is provided, although all the <i>numeric</i> validators
+ * support currency validation. The default implementation converts
+ * currency amounts to a <code>java.math.BigDecimal</code> and additionally
+ * it provides <i>lenient</i> currency symbol validation. That is, currency
+ * amounts are valid with <i>or</i> without the currency symbol.
+ * </p>
+ * <pre>
+ * BigDecimalValidator validator = CurrencyValidator.getInstance();
+ * BigDecimal fooAmount = validator.validate("$12,500.00", Locale.US);
+ * if (fooAmount == null) {
+ * // error...not a valid currency amount
+ * return;
+ * }
+ * // Check the amount is a minimum of $1,000
+ * if (validator.minValue(fooAmount, 1000) {
+ * // valid...in the specified range
+ * return;
+ * }
+ * </pre>
+ * <p>
+ * If, for example, you want to use the <a href="IntegerValidator.html">Integer
+ * Validator</a> to validate a currency, then you can simply create a
+ * new instance with the appropriate <i>format style</i>. Note that
+ * the other validators do not support the <i>lenient</i> currency symbol
+ * validation.
+ * </p>
+ * <pre>
+ * IntegerValidator validator =
+ * new IntegerValidator(true, IntegerValidator.CURRENCY_FORMAT);
+ * String pattern = "#,###" + '\u00A4' + '\u00A4'; // Use international symbol
+ * Integer fooAmount = validator.validate("10.100EUR", pattern, Locale.GERMAN);
+ * if (fooAmount == null) {
+ * // error...not a valid currency amount
+ * return;
+ * }
+ * </pre>
+ * <a id="numeric.percent"></a>
+ * <h2>3.6 Percent Validation</h2>
+ * <p>
+ * A default <a href="PercentValidator.html">Percent Validator</a>
+ * implementation is provided, although the <i>Float</i>,
+ * <i>Double</i> and <i>BigDecimal</i> validators also support
+ * percent validation. The default implementation converts
+ * percent amounts to a <code>java.math.BigDecimal</code> and additionally
+ * it provides <i>lenient</i> percent symbol validation. That is, percent
+ * amounts are valid with <i>or</i> without the percent symbol.
+ * </p>
+ * <pre>
+ * BigDecimalValidator validator = PercentValidator.getInstance();
+ * BigDecimal fooPercent = validator.validate("20%", Locale.US);
+ * if (fooPercent == null) {
+ * // error...not a valid percent
+ * return;
+ * }
+ * // Check the percent is between 10% and 90%
+ * if (validator.isInRange(fooPercent, 0.1, 0.9) {
+ * // valid...in the specified range
+ * return;
+ * }
+ * </pre>
+ * <p>
+ * If, for example, you want to use the <a href="FloatValidator.html">Float
+ * Validator</a> to validate a percent, then you can simply create a
+ * new instance with the appropriate <i>format style</i>. Note that
+ * the other validators do not support the <i>lenient</i> percent symbol
+ * validation.
+ * </p>
+ * <pre>
+ * FloatValidator validator =
+ * new FloatValidator(true, FloatValidator.PERCENT_FORMAT);
+ * Float fooPercent = validator.validate("20%", "###%");
+ * if (fooPercent == null) {
+ * // error...not a valid percent
+ * return;
+ * }
+ * </pre>
+ * <p>
+ * <strong>Note</strong>: in theory the other numeric validators besides
+ * <i>Float</i>, <i>Double</i> and <i>BigDecimal</i> (i.e. <i>Byte</i>,
+ * <i>Short</i>, <i>Integer</i>, <i>Long</i> and <i>BigInteger</i>)
+ * also support percent validation. However, since they don't allow fractions
+ * they will only work with percentages greater than 100%.
+ * </p>
+ * <a id="other"></a>
+ * <h2>4. Other Validators</h2>
+ * <a id="other.overview"></a>
+ * <h2>4.1 Overview</h2>
+ * <p>
+ * This section lists other available validators.
+ * </p>
+ * <ul>
+ * <li><a href="#other.regex">Regular Expressions</a> - validates
+ * using Java 1.4+ regular expression support</li>
+ * <li><a href="#other.checkdigit">Check Digit</a> - validates/calculates
+ * check digits (i.e. EAN/UPC, credit card, ISBN).</li>
+ * <li><a href="#other.code">Code Validation</a> - provides generic
+ * code validation - format, minimum/maximum length and check digit.</li>
+ * <li><a href="#other.isbn">ISBN Validation</a> - provides ISBN-10
+ * and ISBN-13 validation.</li>
+ * <li><a href="#other.inet">IP Address Validation</a> - provides IPv4 address
+ * validation.</li>
+ * <li><a href="#other.email">Email Address Validation</a> - provides email
+ * address validation according to RFC 822 standards.</li>
+ * <li><a href="#other.url">URL Validation</a> - provides URL validation on
+ * scheme, domain, and authority.</li>
+ * <li><a href="#other.domain">Domain Name Validation</a> - provides domain
+ * name and IANA TLD validation.</li>
+ * </ul>
+ * <a id="other.regex"></a>
+ * <h2>4.2 Regular Expression Validation</h2>
+ * <p>
+ * Regular expression validation can be done either by using the <i>static</i>
+ * methods provied by <a href="RegexValidator.html">RegexValidator</a> or
+ * by creating a new instance, which caches and re-uses compiled Patterns.
+ * </p>
+ * <ul>
+ * <li><b>Method Flavours</b> - three <i>flavours</i> of validation metods are provided:</li>
+ * <li>
+ * <ul>
+ * <li><code>isValid()</code> methods return true/false to indicate
+ * whether validation was successful.</li>
+ * <li><code>validate()</code> methods return a <code>String</code>
+ * value of the matched <i>groups</i> aggregated together or
+ * <code>null</code> if invalid.</li>
+ * <li><code>match()</code> methods return a <code>String</code> array
+ * of the matched <i>groups</i> or <code>null</code> if invalid.</li>
+ * </ul>
+ * </li>
+ * <li><b>Case Sensitivity</b> - matching can be done in either a <i>case
+ * sensitive</i> or <i>case in-sensitive</i> way.</li>
+ * <li><b>Multiple Expressions</b> - instances of the
+ * <a href="RegexValidator.html">RegexValidator</a>
+ * can be created to either match against a single regular expression
+ * or set (String array) of regular expressions.</li>
+ * </ul>
+ * <p>
+ * Below is an example of using one of the static methods to validate,
+ * matching in a <i>case insensitive</i> manner and returning a String
+ * of the matched groups (which doesn't include the hyphen).
+ * </p>
+ * <pre>
+ * // set up the parameters
+ * boolean caseSensitive = false;
+ * String regex = "^([A-Z]*)(?:\\-)([A-Z]*)$";
+ * // validate - result should be a String of value "abcdef"
+ * String result = RegexValidator.validate("abc-def", regex, caseSensitive);
+ * </pre>
+ * <p>The following static methods are provided for regular expression validation:
+ * </p>
+ * <ul>
+ * <li><code>isValid(<i>value</i>, <i>regex</i>)</code></li>
+ * <li><code>isValid(<i>value</i>, <i>regex</i>, <i>caseSensitive</i>)</code></li>
+ * <li><code>validate(<i>value</i>, <i>regex</i>)</code></li>
+ * <li><code>validate(<i>value</i>, <i>regex</i>, <i>caseSensitive</i>)</code></li>
+ * <li><code>match(<i>value</i>, <i>regex</i>)</code></li>
+ * <li><code>match(<i>value</i>, <i>regex</i>, <i>caseSensitive</i>)</code></li>
+ * </ul>
+ * <p>
+ * Below is an example of creating an instance of
+ * <a href="RegexValidator.html">RegexValidator</a> matching in a <i>case insensitive</i>
+ * manner against a set of regular expressions:
+ * </p>
+ * <pre>
+ * // set up the parameters
+ * boolean caseSensitive = false;
+ * String regex1 = "^([A-Z]*)(?:\\-)([A-Z]*)*$"
+ * String regex2 = "^([A-Z]*)$";
+ * String[] regexs = new String[] {regex1, regex1};
+ * // Create the validator
+ * RegexValidator validator = new RegexValidator(regexs, caseSensitive);
+ * // Validate true/false
+ * boolean valid = validator.isValid("abc-def");
+ * // Validate and return a String
+ * String result = validator.validate("abc-def");
+ * // Validate and return a String[]
+ * String[] groups = validator.match("abc-def");
+ * </pre>
+ * <p>See the
+ * <a href="RegexValidator.html">RegexValidator</a> javadoc for a full list
+ * of the available constructors.
+ * </p>
+ * <a id="other.checkdigit"></a>
+ * <h2>4.3 Check Digit validation/calculation</h2>
+ * <p>
+ * <a href="checkdigit/CheckDigit.html">CheckDigit</a> defines a new
+ * type for the calculation and validation of check digits with the
+ * following methods:
+ * </p>
+ * <ul>
+ * <li><code>isValid(<i>code</i>)</code> - validates the check digit of a code,
+ * returning <code>true</code> or <code>false</code>.</li>
+ * <li><code>calculate(<i>code</i>)</code> - calulates the check digit for a code
+ * returning the check digit character.</li>
+ * </ul>
+ * <p>
+ * The following implementations are provided:
+ * </p>
+ * <ul>
+ * <li><a href="checkdigit/ABANumberheckDigit.html">ABANumberCheckDigit</a>
+ * for <b>ABA Number</b> (or <b>Routing Transit Number</b> (RTN)) check digit calculation.</li>
+ * <li><a href="checkdigit/CUSIPCheckDigit.html">CUSIPCheckDigit</a>
+ * for <b>CUSIP</b> (North American Securities) check digit calculation.</li>
+ * <li><a href="checkdigit/EAN13CheckDigit.html">EAN13CheckDigit</a>
+ * for <b>EAN-13</b>, <b>UPC</b>, <b>ISBN-13</b> check digit calculation.</li>
+ * <li><a href="checkdigit/ISBNCheckDigit.html">ISBNCheckDigit</a>
+ * for <b>ISBN-10</b> and <b>ISBN-13</b> check digit calculation.</li>
+ * <li><a href="checkdigit/ISBN10CheckDigit.html">ISBN10CheckDigit</a>
+ * for <b>ISBN-10</b> check digit calculation.</li>
+ * <li><a href="checkdigit/ISINCheckDigit.html">ISINCheckDigit</a>
+ * for <b>ISIN</b> International Securities Identifying Number check digit calculation.</li>
+ * <li><a href="checkdigit/LuhnCheckDigit.html">LuhnCheckDigit</a>
+ * for <b>Luhn</b> check digit calculation - used by <b>credit cards</b>.</li>
+ * <li><a href="checkdigit/ModulusCheckDigit.html">ModulusCheckDigit</a>
+ * - <b>abstract</b> class for custom <b>modulus</b> check digit
+ * implementations.</li>
+ * <li><a href="checkdigit/SedolCheckDigit.html">SedolCheckDigit</a>
+ * for <b>SEDOL</b> (UK Securities) check digit calculation.</li>
+ * <li><a href="checkdigit/VerhoeffCheckDigit.html">VerhoeffCheckDigit</a>
+ * for <b>Verhoeff</b> (Dihedral) check digit calculation.</li>
+ * </ul>
+ * <p>
+ * The following examples show validating the check digit of a code:
+ * </p>
+ * <pre>
+ * // Luhn check digit validation
+ * boolean valid = LuhnCheckDigit.INSTANCE.isValid(code);
+ * // EAN / UPC / ISBN-13 check digit validation
+ * boolean valid = EAN13CheckDigit.INSTANCE.isValid(code);
+ * // ISBN-10 check digit validation
+ * boolean valid = ISBNCheckDigit.ISBN10.isValid(code);
+ * boolean valid = ISBN10CheckDigit.INSTANCE.isValid(code);
+ * // ISBN-13 check digit validation
+ * boolean valid = ISBNCheckDigit.ISBN13.isValid(code);
+ * // ISBN-10 or ISBN-13 check digit validation
+ * boolean valid = ISBNCheckDigit.ISBN.isValid(code);
+ * </pre>
+ * <p>
+ * The following examples show calulating the check digit of a code:
+ * </p>
+ * <pre>
+ * // Luhn check digit validation
+ * char checkdigit = LuhnCheckDigit.INSTANCE.calculate(code);
+ * // EAN / UPC / ISBN-13 check digit validation
+ * char checkdigit = EAN13CheckDigit.INSTANCE.calculate(code);
+ * // ISBN-10 check digit validation
+ * char checkdigit = ISBNCheckDigit.ISBN10.isValid(code);
+ * char checkdigit = ISBN10CheckDigit.INSTANCE.calculate(code);
+ * // ISBN-13 check digit validation
+ * char checkdigit = ISBNCheckDigit.ISBN13.calculate(code);
+ * // ISBN-10 or ISBN-13 check digit validation
+ * char checkdigit = ISBNCheckDigit.ISBN.calculate(code);
+ * </pre>
+ * <a id="other.code"></a>
+ * <h2>4.4 General Code validation</h2>
+ * <p>
+ * <a href="CodeValidator.html">CodeValidator</a> provides a generic
+ * implementation for validating codes. It performs the following
+ * validations on a code:
+ * </p>
+ * <ul>
+ * <li><b>Format</b> - the format of the code is validated using
+ * a <i>regular expression</i> (see <a href="RegexValidator.html">RegexValidator</a>).</li>
+ * <li><b>Length</b> - the minimum/maximum length of the code is
+ * checked - after being parsed by the regular expression - with which
+ * <i>format</i> characters can be removed with the use of
+ * <i>non-capturing</i> groups.</li>
+ * <li><b>Check Digit</b> - a <a href="checkdigit/CheckDigit.html">CheckDigit</a>
+ * routine checks that code's check digit is valid.</li>
+ * </ul>
+ * <p>
+ * For example to create a validator to validate EAN-13 codes (numeric,
+ * with a length of 13):
+ * </p>
+ * <pre>
+ * // Create an EAN-13 code validator
+ * CodeValidator validator = new CodeValidator("^[0-9]*$", 13, EAN13CheckDigit.INSTANCE);
+ * // Validate an EAN-13 code
+ * if (!validator.isValid(code)) {
+ * ... // invalid
+ * }
+ * </pre>
+ * <a id="other.isbn"></a>
+ * <h2>4.5 ISBN validation</h2>
+ * <p>
+ * <a href="ISBNValidator.html">ISBNValidator</a> provides ISBN-10
+ * and ISBN-13 validation and can <i>optionally</i> convert
+ * ISBN-10 codes to ISBN-13.
+ * </p>
+ * <ul>
+ * <li><b>ISBN-10</b> - validates using a
+ * <a href="CodeValidator.html">CodeValidator</a> with the
+ * <a href="checkdigit/ISBN10CheckDigit.html">ISBN10CheckDigit</a>
+ * routine.</li>
+ * <li>
+ * <ul>
+ * <li><code>isValidISBN10(<i>value</i>)</code> - returns a boolean</li>
+ * <li><code>validateISBN10(<i>value</i>)</code> - returns a reformatted ISBN-10 code</li>
+ * </ul>
+ * </li>
+ * <li><b>ISBN-13</b> - validates using a
+ * <a href="CodeValidator.html">CodeValidator</a> with the
+ * <a href="checkdigit/EAN13CheckDigit.html">EAN13CheckDigit</a>
+ * routine.</li>
+ * <li>
+ * <ul>
+ * <li><code>isValidISBN13(<i>value</i>)</code> - returns a boolean</li>
+ * <li><code>validateISBN13(<i>value</i>)</code> - returns a reformatted ISBN-13 code</li>
+ * </ul>
+ * </li>
+ * <li><b>ISBN-10</b> and <b>ISBN-13</b> - validates codes are either
+ * valid ISBN-10 or valid ISBN-13 - optionally can convert ISBN-10 codes to ISBN-13.</li>
+ * <li>
+ * <ul>
+ * <li><code>isValid(<i>value</i>)</code> - returns a boolean</li>
+ * <li><code>validate(<i>value</i>)</code> - returns a reformatted ISBN code
+ * (converts ISBN-10 to ISBN-13 if the <i>convert</i> option is <code>true</code>).</li>
+ * </ul>
+ * </li>
+ * </ul>
+ * <p>
+ * For example to validate
+ * </p>
+ * <pre>
+ * // Validate an ISBN-10 or ISBN-13 code
+ * if (!ISBNValidator.getInstance().isValid(code)) {
+ * ... // invalid
+ * }
+ * // Validate an ISBN-10 or ISBN-13 code (converting to ISBN-13)
+ * String code = ISBNValidator.getInstance().validate(code);
+ * // Validate an ISBN-10 or ISBN-13 code (not converting)
+ * String code = ISBNValidator.getInstance(false).validate(code);
+ * </pre>
+ * <a id="other.inet"></a>
+ * <h2>4.6 IP Address Validation</h2>
+ * <p>
+ * <a href="InetAddressValidator.html">InetAddressValidator</a> provides
+ * IPv4 address validation.
+ * </p>
+ * <p>
+ * For example:
+ * </p>
+ * <pre>
+ * // Get an InetAddressValidator
+ * InetAddressValidator validator = InetAddressValidator.getInstance();
+ * // Validate an IPv4 address
+ * if (!validator.isValid(candidateInetAddress)) {
+ * ... // invalid
+ * }
+ * </pre>
+ * <a id="other.email"></a>
+ * <h2>4.7 Email Address Validation</h2>
+ * <p>
+ * <a href="EmailValidator.html">EmailValidator</a> provides email address
+ * validation according to RFC 822 standards.
+ * </p>
+ * <p>
+ * For example:
+ * </p>
+ * <pre>
+ * // Get an EmailValidator
+ * EmailValidator validator = EmailValidator.getInstance();
+ * // Validate an email address
+ * boolean isAddressValid = validator.isValid("user@apache.org");
+ * // Validate a variable containing an email address
+ * if (!validator.isValid(addressFromUserForm)) {
+ * webController.sendRedirect(ERROR_REDIRECT, "Email address isn't valid");
+ * // etc.
+ * }
+ * </pre>
+ * <a id="other.url"></a>
+ * <h2>4.8 URL Validation</h2>
+ * <p>
+ * <a href="UrlValidator.html">UrlValidator</a> provides URL validation by
+ * checking the scheme, authority, path, query, and fragment in turn. Clients
+ * may specify valid schemes to be used in validating in addition to or instead of
+ * the default values (HTTP, HTTPS, FTP). The UrlValidator also supports options
+ * that change the parsing rules; for example, the ALLOW_2_SLASHES option instructs
+ * the Validator to allow consecutive slash characters in the path component, which
+ * is considered an error by default.
+ * For more information on the available options, see the UrlValidator documentation.
+ * </p>
+ * <p>
+ * For example:
+ * </p>
+ * <pre>
+ * // Get an UrlValidator
+ * UrlValidator defaultValidator = new UrlValidator(); // default schemes
+ * if (defaultValidator.isValid("http://www.apache.org")) {
+ * ... // valid
+ * }
+ * if (!defaultValidator.isValid("http//www.oops.com")) {
+ * ... // invalid
+ * }
+ * // Get an UrlValidator with custom schemes
+ * String[] customSchemes = { "sftp", "scp", "https" };
+ * UrlValidator customValidator = new UrlValidator(customSchemes);
+ * if (!customValidator.isValid("http://www.apache.org")) {
+ * ... // invalid due to insecure protocol
+ * }
+ * // Get an UrlValidator that allows double slashes in the path
+ * UrlValidator doubleSlashValidator = new UrlValidator(UrlValidator.ALLOW_2_SLASHES);
+ * if (doubleSlashValidator.isValid("http://www.apache.org//projects")) {
+ * ... // valid only in this Validator instance
+ * }
+ * </pre>
+ * <a id="other.domain"></a>
+ * <h2>4.9 Domain Name Validation</h2>
+ * <p>
+ * <a href="DomainValidator.html">DomainValidator</a> provides validation of Internet
+ * domain names as specified by RFC1034/RFC1123 and according to the IANA-recognized
+ * list of top-level domains (TLDs). Clients may validate an entire domain name, a
+ * TLD of any category, or a TLD within a specific category.
+ * </p>
+ * <p>
+ * For example:
+ * </p>
+ * <pre>
+ * // Get a DomainValidator
+ * DomainValidator validator = DomainValidator.getInstance();
+ * // Validate a domain name
+ * if (validator.isValid("www.apache.org")) {
+ * ... // valid
+ * }
+ * if (!validator.isValid("www.apache.wrong")) {
+ * ... // invalid
+ * }
+ * // Validate a TLD
+ * if (validator.isValidTld(".com")) {
+ * ... // valid
+ * }
+ * if (validator.isValidTld("org")) {
+ * ... // valid, the leading dot is optional
+ * }
+ * if (validator.isValidTld(".us")) {
+ * ... // valid, country code TLDs are also accepted
+ * }
+ * // Validate TLDs in categories
+ * if (validator.isValidGenericTld(".name")) {
+ * ... // valid
+ * }
+ * if (!validator.isValidGenericTld(".uk")) {
+ * ... // invalid, .uk is a country code TLD
+ * }
+ * if (!validator.isValidCountryCodeTld(".info")) {
+ * ... // invalid, .info is a generic TLD
+ * }
+ * </pre>
+ */
+package org.apache.commons.validator.routines;
\ No newline at end of file
diff --git a/src/main/java/org/apache/commons/validator/routines/package.html b/src/main/java/org/apache/commons/validator/routines/package.html
deleted file mode 100644
index 7edc7732..00000000
--- a/src/main/java/org/apache/commons/validator/routines/package.html
+++ /dev/null
@@ -1,835 +0,0 @@
-<!--
- 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.
--->
-<html>
-<head>
-<title>Package Documentation for org.apache.commons.validator.routines Package</title>
-</head>
-<body bgcolor="white">
- <p>This package contains <i>independent</i> validation routines.</p>
-<h2>Table of Contents</h2>
-
-<ul>
-<li>1. <a href="#overview">Overview</a></li>
-<li>2. <a href="#date">Date and Time Validators</a>
- <ul>
- <li>2.1 <a href="#date.overview">Overview</a></li>
- <li>2.2 <a href="#date.validate">Validating a Date Value</a></li>
- <li>2.3 <a href="#date.format">Formatting</a></li>
- <li>2.4 <a href="#date.timezone">Time Zones</a></li>
- <li>2.5 <a href="#date.compare">Comparing Dates and Times</a></li>
- </ul>
-</li>
-<li>3. <a href="#numeric">Numeric Validators</a>
- <ul>
- <li>3.1 <a href="#numeric.overview">Overview</a></li>
- <li>3.2 <a href="#numeric.validate">Validating a Numeric Value</a></li>
- <li>3.3 <a href="#numeric.format">Formatting</a></li>
- <li>3.4 <a href="#numeric.compare">Comparing Numbers</a></li>
- <li>3.5 <a href="#numeric.currency">Currency Validation</a></li>
- <li>3.6 <a href="#numeric.percent">Percent Validation</a></li>
- </ul>
-</li>
-<li>4. <a href="#other">Other Validators</a>
- <ul>
- <li>4.1 <a href="#other.overview">Overview</a></li>
- <li>4.2 <a href="#other.regex">Regular Expression validation</a></li>
- <li>4.3 <a href="#other.checkdigit">Check Digit Validation/Calculation</a></li>
- <li>4.4 <a href="#other.code">General Code Validation</a></li>
- <li>4.5 <a href="#other.isbn">ISBN Validation</a></li>
- <li>4.6 <a href="#other.inet">IP Address Validation</a></li>
- <li>4.7 <a href="#other.email">Email Address Validation</a></li>
- <li>4.8 <a href="#other.url">URL Validation</a></li>
- <li>4.9 <a href="#other.domain">Domain Name Validation</a></li>
- </ul>
-</li>
-</ul>
-
-<a id="overview"></a>
-<h2>1. Overview</h2>
-<p>
- Commons Validator serves two purposes:
-</p>
- <ul>
- <li>To provide standard, independent validation routines/functions.</li>
- <li>To provide a <i>mini</i> framework for Validation.</li>
- </ul>
-<p>
- This package has been created, since version 1.3.0, in an attempt to clearly
- separate these two concerns and is the location for the standard, independent
- validation routines/functions in <em>Commons Validator</em>.
-</p>
-
-<p>
- The contents of this package have no dependencies on the framework aspect of
- Commons Validator and can be used on their own.
-</p>
-
-<a id="date"></a>
-<h2>2. Date and Time Validators</h2>
-
-<a id="date.overview"></a>
-<h2>2.1 Overview</h2>
-<p>
- The date and time validators either validate according to a specified <i>format</i>
- or use a standard <i>format</i> for a specified <code>Locale</code>.
-</p>
-<ul>
- <li><a href="DateValidator.html">Date Validator</a> - validates dates
- converting to a <code>java.util.Date</code> type.</li>
- <li><a href="CalendarValidator.html">Calendar Validator</a> - validates dates
- converting to a <code>java.util.Calendar</code> type.</li>
- <li><a href="TimeValidator.html">Time Validator</a> - validates times
- converting to a <code>java.util.Calendar</code> type.</li>
-</ul>
-
-<a id="date.validate"></a>
-<h2>2.2 Validating a Date Value</h2>
-<p>
- You can either use one of the <code>isValid()</code> methods to just determine
- if a date is valid, or use one of the <code>validate()</code> methods to
- validate a date and convert it to a <code>java.util.Date</code>...
-</p>
-<pre>
- // Get the Date validator
- DateValidator validator = DateValidator.getInstance();
-
- // Validate/Convert the date
- Date fooDate = validator.validate(fooString, "dd/MM/yyyy");
- if (fooDate == null) {
- // error...not a valid date
- return;
- }
-</pre>
-
-<p>The following methods are provided to validate a date/time (return a boolean result):
-</p>
-<ul>
- <li><code>isValid(<i>value</i>)</code></li>
- <li><code>isValid(<i>value</i>, <i>pattern</i>)</code></li>
- <li><code>isValid(<i>value</i>, Locale)</code></li>
- <li><code>isValid(<i>value</i>, <i>pattern</i>, Locale)</code></li>
-</ul>
-<p>The following methods are provided to validate a date/time and convert it to either a
- <code>java.util.Date</code> or <code>java.util.Calendar</code>:
-</p>
-<ul>
- <li><code>validate(<i>value</i>)</code></li>
- <li><code>validate(<i>value</i>, <i>pattern</i>)</code></li>
- <li><code>validate(<i>value</i>, Locale)</code></li>
- <li><code>validate(<i>value</i>, <i>pattern</i>, Locale)</code></li>
-</ul>
-
-<a id="date.format"></a>
-<h2>2.3 Formatting</h2>
-<p>
- Formatting and validating are two sides of the same coin. Typically
- <i>input</i> values which are converted from Strings according to a
- specified <i>format</i> also have to be rendered for <i>output</i> in
- the same format. These validators provide the mechanism for formatting from
- date/time objects to Strings. The following methods are provided to format
- date/time values as Strings:
-</p>
-<ul>
- <li><code>format(<i>date/calendar</i>)</code></li>
- <li><code>format(<i>date/calendar</i>, <i>pattern</i>)</code></li>
- <li><code>format(<i>date/calendar</i>, Locale)</code></li>
- <li><code>format(<i>date/calendar</i>, <i>pattern</i>, Locale)</code></li>
-</ul>
-
-<a id="date.timezone"></a>
-<h2>2.4 Time Zones</h2>
-<p>
- If the date being parsed relates to a different time zone than the
- system default, you can specify the <code>TimeZone</code> to use when
- validating/converting:
-</p>
-<pre>
- // Get the GMT time zone
- TimeZone GMT = TimeZone.getInstance("GMT");
-
- // Validate/Convert the date using GMT
- Date fooDate = validator.validate(fooString, "dd/MM/yyyy", GMT);
-</pre>
-
-<p>The following Time Zone <i>flavours</i> of the Validation/Conversion methods
- are provided:</p>
-<ul>
- <li><code>validate(<i>value</i>, TimeZone)</code></li>
- <li><code>validate(<i>value</i>, <i>pattern</i>, TimeZone)</code></li>
- <li><code>validate(<i>value</i>, Locale, TimeZone)</code></li>
- <li><code>validate(<i>value</i>, <i>pattern</i>, Locale, TimeZone)</code></li>
-</ul>
-
-<a id="date.compare"></a>
-<h2>2.5 Comparing Dates and Times</h2>
-<p>
- As well as validating that a value is a valid date or time, these validators
- also provide <i>date comparison</i> functions. The <code>DateValidator</code>
- and <code>CalendarValidator</code> provide functions for comparing years,
- quarters, months, weeks and dates and the <code>TimeValidator</code> provides
- functions for comparing hours, minutes, seconds and milliseconds.
- For example, to check that a date is in the current month, you could use
- the <code>compareMonths()</code> method, which compares the year and month
- components of a date:
-</p>
-<pre>
- // Check if the date is in the current month
- int compare = validator.compareMonths(fooDate, new Date(), null);
- if (compare == 0) {
- // do current month processing
- return;
- }
-
- // Check if the date is in the previous quarter
- compare = validator.compareQuarters(fooDate, new Date(), null);
- if (compare < 0) {
- // do previous quarter processing
- return;
- }
-
- // Check if the date is in the next year
- compare = validator.compareYears(fooDate, new Date(), null);
- if (compare > 0) {
- // do next year processing
- return;
- }
-</pre>
-
-
-<a id="numeric"></a>
-<h2>3 Numeric Validators</h2>
-
-<a id="numeric.overview"></a>
-<h2>3.1 Overview</h2>
-<p>
- The numeric validators either validate according to a specified <i>format</i>
- or use a standard <i>format</i> for a specified <code>Locale</code> or use
- a <i>custom</i> format for a specified <code>Locale</code>.
-</p>
-<ul>
- <li><a href="ByteValidator.html">Byte Validator</a> - validates numbers
- converting to a <code>java.lang.Byte</code> type.</li>
- <li><a href="ShortValidator.html">Short Validator</a> - validates numbers
- converting to a <code>java.lang.Short</code> type.</li>
- <li><a href="IntegerValidator.html">Integer Validator</a> - validates numbers
- converting to a <code>java.lang.Integer</code> type.</li>
- <li><a href="LongValidator.html">Long Validator</a> - validates numbers
- converting to a <code>java.lang.Long</code> type.</li>
- <li><a href="FloatValidator.html">Float Validator</a> - validates numbers
- converting to a <code>java.lang.Float</code> type.</li>
- <li><a href="DoubleValidator.html">Double Validator</a> - validates numbers
- converting to a <code>java.lang.Double</code> type.</li>
- <li><a href="BigIntegerValidator.html">BigInteger Validator</a> - validates numbers
- converting to a <code>java.math.BigInteger</code> type.</li>
- <li><a href="BigDecimalValidator.html">BigDecimal Validator</a> - validates numbers
- converting to a <code>java.math.BigDecimal</code> type.</li>
-</ul>
-
-<a id="numeric.validate"></a>
-<h2>3.2 Validating a Numeric Value</h2>
-<p>
- You can either use one of the <code>isValid()</code> methods to just determine
- if a number is valid, or use one of the <code>validate()</code> methods to
- validate a number and convert it to an appropriate type.
-</p>
-<p>
- The following example validates an integer against a custom pattern
- for the <i>German</i> locale. Please note the format is specified using
- the standard symbols for <code>java.text.DecimalFormat</code> so although
- the decimal separator is indicated as a period (".") in the format, the
- validator will check using the German decimal separator - which is a comma (",").
-</p>
-<pre>
- // Get the Integer validator
- IntegerValidator validator = IntegerValidator.getInstance();
-
- // Validate/Convert the number
- Integer fooInteger = validator.validate(fooString, "#,##0.00", Locale.GERMAN);
- if (fooInteger == null) {
- // error...not a valid Integer
- return;
- }
-</pre>
-<p>The following methods are provided to validate a number (return a boolean result):</p>
-<ul>
- <li><code>isValid(<i>value</i>)</code></li>
- <li><code>isValid(<i>value</i>, <i>pattern</i>)</code></li>
- <li><code>isValid(<i>value</i>, Locale)</code></li>
- <li><code>isValid(<i>value</i>, <i>pattern</i>, Locale)</code></li>
-</ul>
-
-<p>The following methods are provided to validate a number and convert it one of
- the <code>java.lang.Number</code> implementations:</p>
-<ul>
- <li><code>validate(<i>value</i>)</code></li>
- <li><code>validate(<i>value</i>, <i>pattern</i>)</code></li>
- <li><code>validate(<i>value</i>, Locale)</code></li>
- <li><code>validate(<i>value</i>, <i>pattern</i>, Locale)</code></li>
-</ul>
-
-<a id="numeric.format"></a>
-<h2>3.3 Formatting</h2>
-<p>
- Formatting and validating are two sides of the same coin. Typically
- <i>input</i> values which are converted from Strings according to a
- specified <i>format</i> also have to be rendered for <i>output</i> in
- the same format. These validators provide the mechanism for formatting from
- numeric objects to Strings. The following methods are provided to format
- numeric values as Strings:
-</p>
-<ul>
- <li><code>format(<i>number</i>)</code></li>
- <li><code>format(<i>number</i>, <i>pattern</i>)</code></li>
- <li><code>format(<i>number</i>, Locale)</code></li>
- <li><code>format(<i>number</i>, <i>pattern</i>, Locale)</code></li>
-</ul>
-
-<a id="numeric.compare"></a>
-<h2>3.4 Comparing Numbers</h2>
-<p>
- As well as validating that a value is a valid number, these validators
- also provide functions for validating the <i>minimum</i>, <i>maximum</i>
- and <i>range</i> of a value.
-</p>
-<pre>
- // Check the number is between 25 and 75
- if (validator.isInRange(fooInteger, 25, 75) {
- // valid...in the specified range
- return;
- }
-</pre>
-
-<a id="numeric.currency"></a>
-<h2>3.5 Currency Validation</h2>
-<p>
- A default <a href="CurrencyValidator.html">Currency Validator</a>
- implementation is provided, although all the <i>numeric</i> validators
- support currency validation. The default implementation converts
- currency amounts to a <code>java.math.BigDecimal</code> and additionally
- it provides <i>lenient</i> currency symbol validation. That is, currency
- amounts are valid with <i>or</i> without the currency symbol.
-</p>
-<pre>
- BigDecimalValidator validator = CurrencyValidator.getInstance();
-
- BigDecimal fooAmount = validator.validate("$12,500.00", Locale.US);
- if (fooAmount == null) {
- // error...not a valid currency amount
- return;
- }
-
- // Check the amount is a minimum of $1,000
- if (validator.minValue(fooAmount, 1000) {
- // valid...in the specified range
- return;
- }
-</pre>
-
-<p>
- If, for example, you want to use the <a href="IntegerValidator.html">Integer
- Validator</a> to validate a currency, then you can simply create a
- new instance with the appropriate <i>format style</i>. Note that
- the other validators do not support the <i>lenient</i> currency symbol
- validation.
-</p>
-
-<pre>
- IntegerValidator validator =
- new IntegerValidator(true, IntegerValidator.CURRENCY_FORMAT);
-
- String pattern = "#,###" + '\u00A4' + '\u00A4'; // Use international symbol
-
- Integer fooAmount = validator.validate("10.100EUR", pattern, Locale.GERMAN);
- if (fooAmount == null) {
- // error...not a valid currency amount
- return;
- }
-</pre>
-
-<a id="numeric.percent"></a>
-<h2>3.6 Percent Validation</h2>
-<p>
- A default <a href="PercentValidator.html">Percent Validator</a>
- implementation is provided, although the <i>Float</i>,
- <i>Double</i> and <i>BigDecimal</i> validators also support
- percent validation. The default implementation converts
- percent amounts to a <code>java.math.BigDecimal</code> and additionally
- it provides <i>lenient</i> percent symbol validation. That is, percent
- amounts are valid with <i>or</i> without the percent symbol.
-</p>
-
-<pre>
- BigDecimalValidator validator = PercentValidator.getInstance();
-
- BigDecimal fooPercent = validator.validate("20%", Locale.US);
- if (fooPercent == null) {
- // error...not a valid percent
- return;
- }
-
- // Check the percent is between 10% and 90%
- if (validator.isInRange(fooPercent, 0.1, 0.9) {
- // valid...in the specified range
- return;
- }
-</pre>
-
-<p>
- If, for example, you want to use the <a href="FloatValidator.html">Float
- Validator</a> to validate a percent, then you can simply create a
- new instance with the appropriate <i>format style</i>. Note that
- the other validators do not support the <i>lenient</i> percent symbol
- validation.
-</p>
-
-<pre>
- FloatValidator validator =
- new FloatValidator(true, FloatValidator.PERCENT_FORMAT);
-
- Float fooPercent = validator.validate("20%", "###%");
- if (fooPercent == null) {
- // error...not a valid percent
- return;
- }
-
-</pre>
-<p>
- <strong>Note</strong>: in theory the other numeric validators besides
- <i>Float</i>, <i>Double</i> and <i>BigDecimal</i> (i.e. <i>Byte</i>,
- <i>Short</i>, <i>Integer</i>, <i>Long</i> and <i>BigInteger</i>)
- also support percent validation. However, since they don't allow fractions
- they will only work with percentages greater than 100%.
-</p>
-
-<a id="other"></a>
-<h2>4. Other Validators</h2>
-
-<a id="other.overview"></a>
-<h2>4.1 Overview</h2>
-<p>
- This section lists other available validators.
-</p>
-<ul>
- <li><a href="#other.regex">Regular Expressions</a> - validates
- using Java 1.4+ regular expression support</li>
- <li><a href="#other.checkdigit">Check Digit</a> - validates/calculates
- check digits (i.e. EAN/UPC, credit card, ISBN).</li>
- <li><a href="#other.code">Code Validation</a> - provides generic
- code validation - format, minimum/maximum length and check digit.</li>
- <li><a href="#other.isbn">ISBN Validation</a> - provides ISBN-10
- and ISBN-13 validation.</li>
- <li><a href="#other.inet">IP Address Validation</a> - provides IPv4 address
- validation.</li>
- <li><a href="#other.email">Email Address Validation</a> - provides email
- address validation according to RFC 822 standards.</li>
- <li><a href="#other.url">URL Validation</a> - provides URL validation on
- scheme, domain, and authority.</li>
- <li><a href="#other.domain">Domain Name Validation</a> - provides domain
- name and IANA TLD validation.</li>
-</ul>
-
-<a id="other.regex"></a>
-<h2>4.2 Regular Expression Validation</h2>
-<p>
- Regular expression validation can be done either by using the <i>static</i>
- methods provied by <a href="RegexValidator.html">RegexValidator</a> or
- by creating a new instance, which caches and re-uses compiled Patterns.
-</p>
-<ul>
- <li><b>Method Flavours</b> - three <i>flavours</i> of validation metods are provided:</li>
- <li>
- <ul>
- <li><code>isValid()</code> methods return true/false to indicate
- whether validation was successful.</li>
- <li><code>validate()</code> methods return a <code>String</code>
- value of the matched <i>groups</i> aggregated together or
- <code>null</code> if invalid.</li>
- <li><code>match()</code> methods return a <code>String</code> array
- of the matched <i>groups</i> or <code>null</code> if invalid.</li>
- </ul>
- </li>
- <li><b>Case Sensitivity</b> - matching can be done in either a <i>case
- sensitive</i> or <i>case in-sensitive</i> way.</li>
- <li><b>Multiple Expressions</b> - instances of the
- <a href="RegexValidator.html">RegexValidator</a>
- can be created to either match against a single regular expression
- or set (String array) of regular expressions.</li>
-</ul>
-<p>
- Below is an example of using one of the static methods to validate,
- matching in a <i>case insensitive</i> manner and returning a String
- of the matched groups (which doesn't include the hyphen).
-</p>
-<pre>
- // set up the parameters
- boolean caseSensitive = false;
- String regex = "^([A-Z]*)(?:\\-)([A-Z]*)$";
-
- // validate - result should be a String of value "abcdef"
- String result = RegexValidator.validate("abc-def", regex, caseSensitive);
-
-</pre>
-
-<p>The following static methods are provided for regular expression validation:
-</p>
-<ul>
- <li><code>isValid(<i>value</i>, <i>regex</i>)</code></li>
- <li><code>isValid(<i>value</i>, <i>regex</i>, <i>caseSensitive</i>)</code></li>
- <li><code>validate(<i>value</i>, <i>regex</i>)</code></li>
- <li><code>validate(<i>value</i>, <i>regex</i>, <i>caseSensitive</i>)</code></li>
- <li><code>match(<i>value</i>, <i>regex</i>)</code></li>
- <li><code>match(<i>value</i>, <i>regex</i>, <i>caseSensitive</i>)</code></li>
-</ul>
-<p>
- Below is an example of creating an instance of
- <a href="RegexValidator.html">RegexValidator</a> matching in a <i>case insensitive</i>
- manner against a set of regular expressions:
-</p>
-<pre>
- // set up the parameters
- boolean caseSensitive = false;
- String regex1 = "^([A-Z]*)(?:\\-)([A-Z]*)*$"
- String regex2 = "^([A-Z]*)$";
- String[] regexs = new String[] {regex1, regex1};
-
- // Create the validator
- RegexValidator validator = new RegexValidator(regexs, caseSensitive);
-
- // Validate true/false
- boolean valid = validator.isValid("abc-def");
-
- // Validate and return a String
- String result = validator.validate("abc-def");
-
- // Validate and return a String[]
- String[] groups = validator.match("abc-def");
-
-</pre>
-<p>See the
- <a href="RegexValidator.html">RegexValidator</a> javadoc for a full list
- of the available constructors.
-</p>
-
-<a id="other.checkdigit"></a>
-<h2>4.3 Check Digit validation/calculation</h2>
-<p>
- <a href="checkdigit/CheckDigit.html">CheckDigit</a> defines a new
- type for the calculation and validation of check digits with the
- following methods:
-</p>
-<ul>
- <li><code>isValid(<i>code</i>)</code> - validates the check digit of a code,
- returning <code>true</code> or <code>false</code>.</li>
- <li><code>calculate(<i>code</i>)</code> - calulates the check digit for a code
- returning the check digit character.</li>
-</ul>
-<p>
- The following implementations are provided:
-</p>
-<ul>
- <li><a href="checkdigit/ABANumberheckDigit.html">ABANumberCheckDigit</a>
- for <b>ABA Number</b> (or <b>Routing Transit Number</b> (RTN)) check digit calculation.</li>
- <li><a href="checkdigit/CUSIPCheckDigit.html">CUSIPCheckDigit</a>
- for <b>CUSIP</b> (North American Securities) check digit calculation.</li>
- <li><a href="checkdigit/EAN13CheckDigit.html">EAN13CheckDigit</a>
- for <b>EAN-13</b>, <b>UPC</b>, <b>ISBN-13</b> check digit calculation.</li>
- <li><a href="checkdigit/ISBNCheckDigit.html">ISBNCheckDigit</a>
- for <b>ISBN-10</b> and <b>ISBN-13</b> check digit calculation.</li>
- <li><a href="checkdigit/ISBN10CheckDigit.html">ISBN10CheckDigit</a>
- for <b>ISBN-10</b> check digit calculation.</li>
- <li><a href="checkdigit/ISINCheckDigit.html">ISINCheckDigit</a>
- for <b>ISIN</b> International Securities Identifying Number check digit calculation.</li>
- <li><a href="checkdigit/LuhnCheckDigit.html">LuhnCheckDigit</a>
- for <b>Luhn</b> check digit calculation - used by <b>credit cards</b>.</li>
- <li><a href="checkdigit/ModulusCheckDigit.html">ModulusCheckDigit</a>
- - <b>abstract</b> class for custom <b>modulus</b> check digit
- implementations.</li>
- <li><a href="checkdigit/SedolCheckDigit.html">SedolCheckDigit</a>
- for <b>SEDOL</b> (UK Securities) check digit calculation.</li>
- <li><a href="checkdigit/VerhoeffCheckDigit.html">VerhoeffCheckDigit</a>
- for <b>Verhoeff</b> (Dihedral) check digit calculation.</li>
-</ul>
-<p>
- The following examples show validating the check digit of a code:
-</p>
-<pre>
-
- // Luhn check digit validation
- boolean valid = LuhnCheckDigit.INSTANCE.isValid(code);
-
- // EAN / UPC / ISBN-13 check digit validation
- boolean valid = EAN13CheckDigit.INSTANCE.isValid(code);
-
- // ISBN-10 check digit validation
- boolean valid = ISBNCheckDigit.ISBN10.isValid(code);
- boolean valid = ISBN10CheckDigit.INSTANCE.isValid(code);
-
- // ISBN-13 check digit validation
- boolean valid = ISBNCheckDigit.ISBN13.isValid(code);
-
- // ISBN-10 or ISBN-13 check digit validation
- boolean valid = ISBNCheckDigit.ISBN.isValid(code);
-
-</pre>
-<p>
- The following examples show calulating the check digit of a code:
-</p>
-<pre>
-
- // Luhn check digit validation
- char checkdigit = LuhnCheckDigit.INSTANCE.calculate(code);
-
- // EAN / UPC / ISBN-13 check digit validation
- char checkdigit = EAN13CheckDigit.INSTANCE.calculate(code);
-
- // ISBN-10 check digit validation
- char checkdigit = ISBNCheckDigit.ISBN10.isValid(code);
- char checkdigit = ISBN10CheckDigit.INSTANCE.calculate(code);
-
- // ISBN-13 check digit validation
- char checkdigit = ISBNCheckDigit.ISBN13.calculate(code);
-
- // ISBN-10 or ISBN-13 check digit validation
- char checkdigit = ISBNCheckDigit.ISBN.calculate(code);
-
-</pre>
-
-
-<a id="other.code"></a>
-<h2>4.4 General Code validation</h2>
-<p>
- <a href="CodeValidator.html">CodeValidator</a> provides a generic
- implementation for validating codes. It performs the following
- validations on a code:
-</p>
-<ul>
- <li><b>Format</b> - the format of the code is validated using
- a <i>regular expression</i> (see <a href="RegexValidator.html">RegexValidator</a>).</li>
- <li><b>Length</b> - the minimum/maximum length of the code is
- checked - after being parsed by the regular expression - with which
- <i>format</i> characters can be removed with the use of
- <i>non-capturing</i> groups.</li>
- <li><b>Check Digit</b> - a <a href="checkdigit/CheckDigit.html">CheckDigit</a>
- routine checks that code's check digit is valid.</li>
-</ul>
-<p>
- For example to create a validator to validate EAN-13 codes (numeric,
- with a length of 13):
-</p>
-<pre>
-
- // Create an EAN-13 code validator
- CodeValidator validator = new CodeValidator("^[0-9]*$", 13, EAN13CheckDigit.INSTANCE);
-
- // Validate an EAN-13 code
- if (!validator.isValid(code)) {
- ... // invalid
- }
-
-</pre>
-
-<a id="other.isbn"></a>
-<h2>4.5 ISBN validation</h2>
-<p>
- <a href="ISBNValidator.html">ISBNValidator</a> provides ISBN-10
- and ISBN-13 validation and can <i>optionally</i> convert
- ISBN-10 codes to ISBN-13.
-</p>
-<ul>
- <li><b>ISBN-10</b> - validates using a
- <a href="CodeValidator.html">CodeValidator</a> with the
- <a href="checkdigit/ISBN10CheckDigit.html">ISBN10CheckDigit</a>
- routine.</li>
- <li>
- <ul>
- <li><code>isValidISBN10(<i>value</i>)</code> - returns a boolean</li>
- <li><code>validateISBN10(<i>value</i>)</code> - returns a reformatted ISBN-10 code</li>
- </ul>
- </li>
- <li><b>ISBN-13</b> - validates using a
- <a href="CodeValidator.html">CodeValidator</a> with the
- <a href="checkdigit/EAN13CheckDigit.html">EAN13CheckDigit</a>
- routine.</li>
- <li>
- <ul>
- <li><code>isValidISBN13(<i>value</i>)</code> - returns a boolean</li>
- <li><code>validateISBN13(<i>value</i>)</code> - returns a reformatted ISBN-13 code</li>
- </ul>
- </li>
- <li><b>ISBN-10</b> and <b>ISBN-13</b> - validates codes are either
- valid ISBN-10 or valid ISBN-13 - optionally can convert ISBN-10 codes to ISBN-13.</li>
- <li>
- <ul>
- <li><code>isValid(<i>value</i>)</code> - returns a boolean</li>
- <li><code>validate(<i>value</i>)</code> - returns a reformatted ISBN code
- (converts ISBN-10 to ISBN-13 if the <i>convert</i> option is <code>true</code>).</li>
- </ul>
- </li>
-</ul>
-<p>
- For example to validate
-</p>
-<pre>
-
- // Validate an ISBN-10 or ISBN-13 code
- if (!ISBNValidator.getInstance().isValid(code)) {
- ... // invalid
- }
-
- // Validate an ISBN-10 or ISBN-13 code (converting to ISBN-13)
- String code = ISBNValidator.getInstance().validate(code);
-
- // Validate an ISBN-10 or ISBN-13 code (not converting)
- String code = ISBNValidator.getInstance(false).validate(code);
-
-</pre>
-
-<a id="other.inet"></a>
-<h2>4.6 IP Address Validation</h2>
-
-<p>
- <a href="InetAddressValidator.html">InetAddressValidator</a> provides
- IPv4 address validation.
-</p>
-<p>
- For example:
-</p>
-<pre>
-
- // Get an InetAddressValidator
- InetAddressValidator validator = InetAddressValidator.getInstance();
-
- // Validate an IPv4 address
- if (!validator.isValid(candidateInetAddress)) {
- ... // invalid
- }
-
-</pre>
-
-<a id="other.email"></a>
-<h2>4.7 Email Address Validation</h2>
-
-<p>
- <a href="EmailValidator.html">EmailValidator</a> provides email address
- validation according to RFC 822 standards.
-</p>
-<p>
- For example:
-</p>
-<pre>
- // Get an EmailValidator
- EmailValidator validator = EmailValidator.getInstance();
-
- // Validate an email address
- boolean isAddressValid = validator.isValid("user@apache.org");
-
- // Validate a variable containing an email address
- if (!validator.isValid(addressFromUserForm)) {
- webController.sendRedirect(ERROR_REDIRECT, "Email address isn't valid");
- // etc.
- }
-</pre>
-
-<a id="other.url"></a>
-<h2>4.8 URL Validation</h2>
-
-<p>
- <a href="UrlValidator.html">UrlValidator</a> provides URL validation by
- checking the scheme, authority, path, query, and fragment in turn. Clients
- may specify valid schemes to be used in validating in addition to or instead of
- the default values (HTTP, HTTPS, FTP). The UrlValidator also supports options
- that change the parsing rules; for example, the ALLOW_2_SLASHES option instructs
- the Validator to allow consecutive slash characters in the path component, which
- is considered an error by default.
-
- For more information on the available options, see the UrlValidator documentation.
-</p>
-<p>
- For example:
-</p>
-<pre>
- // Get an UrlValidator
- UrlValidator defaultValidator = new UrlValidator(); // default schemes
- if (defaultValidator.isValid("http://www.apache.org")) {
- ... // valid
- }
- if (!defaultValidator.isValid("http//www.oops.com")) {
- ... // invalid
- }
-
- // Get an UrlValidator with custom schemes
- String[] customSchemes = { "sftp", "scp", "https" };
- UrlValidator customValidator = new UrlValidator(customSchemes);
- if (!customValidator.isValid("http://www.apache.org")) {
- ... // invalid due to insecure protocol
- }
-
- // Get an UrlValidator that allows double slashes in the path
- UrlValidator doubleSlashValidator = new UrlValidator(UrlValidator.ALLOW_2_SLASHES);
- if (doubleSlashValidator.isValid("http://www.apache.org//projects")) {
- ... // valid only in this Validator instance
- }
-</pre>
-
-<a id="other.domain"></a>
-<h2>4.9 Domain Name Validation</h2>
-
-<p>
- <a href="DomainValidator.html">DomainValidator</a> provides validation of Internet
- domain names as specified by RFC1034/RFC1123 and according to the IANA-recognized
- list of top-level domains (TLDs). Clients may validate an entire domain name, a
- TLD of any category, or a TLD within a specific category.
-</p>
-<p>
- For example:
-</p>
-<pre>
- // Get a DomainValidator
- DomainValidator validator = DomainValidator.getInstance();
-
- // Validate a domain name
- if (validator.isValid("www.apache.org")) {
- ... // valid
- }
- if (!validator.isValid("www.apache.wrong")) {
- ... // invalid
- }
-
- // Validate a TLD
- if (validator.isValidTld(".com")) {
- ... // valid
- }
- if (validator.isValidTld("org")) {
- ... // valid, the leading dot is optional
- }
- if (validator.isValidTld(".us")) {
- ... // valid, country code TLDs are also accepted
- }
-
- // Validate TLDs in categories
- if (validator.isValidGenericTld(".name")) {
- ... // valid
- }
- if (!validator.isValidGenericTld(".uk")) {
- ... // invalid, .uk is a country code TLD
- }
- if (!validator.isValidCountryCodeTld(".info")) {
- ... // invalid, .info is a generic TLD
- }
-</pre>
-</body>
-</html>