<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FRegular_Expressions%2FValidation</id>
		<title>Java/Regular Expressions/Validation - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FRegular_Expressions%2FValidation"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Regular_Expressions/Validation&amp;action=history"/>
		<updated>2026-04-22T05:07:49Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Regular_Expressions/Validation&amp;diff=6021&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Regular_Expressions/Validation&amp;diff=6021&amp;oldid=prev"/>
				<updated>2010-06-01T06:00:48Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:00, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Regular_Expressions/Validation&amp;diff=6020&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Regular_Expressions/Validation&amp;diff=6020&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Find duplication ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.util.regex.Matcher;&lt;br /&gt;
import java.util.regex.Pattern;&lt;br /&gt;
import java.util.regex.PatternSyntaxException;&lt;br /&gt;
public class MatchDuplicateWords {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    hasDuplicate(&amp;quot;pizza pizza&amp;quot;);&lt;br /&gt;
    hasDuplicate(&amp;quot;Faster pussycat kill kill&amp;quot;);&lt;br /&gt;
    hasDuplicate(&amp;quot;The mayor of of simpleton&amp;quot;);&lt;br /&gt;
    hasDuplicate(&amp;quot;Never Never Never Never Never&amp;quot;);&lt;br /&gt;
    hasDuplicate(&amp;quot;222 2222&amp;quot;);&lt;br /&gt;
    hasDuplicate(&amp;quot;sara sarah&amp;quot;);&lt;br /&gt;
    hasDuplicate(&amp;quot;Faster pussycat kill, kill&amp;quot;);&lt;br /&gt;
    hasDuplicate(&amp;quot;. .&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static boolean hasDuplicate(String phrase) {&lt;br /&gt;
    boolean retval = false;&lt;br /&gt;
    String duplicatePattern = &amp;quot;\\b(\\w+) \\1\\b&amp;quot;;&lt;br /&gt;
    Pattern p = null;&lt;br /&gt;
    try {&lt;br /&gt;
      p = Pattern.rupile(duplicatePattern);&lt;br /&gt;
    } catch (PatternSyntaxException pex) {&lt;br /&gt;
      pex.printStackTrace();&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
    int matches = 0;&lt;br /&gt;
    Matcher m = p.matcher(phrase);&lt;br /&gt;
    String val = null;&lt;br /&gt;
    while (m.find()) {&lt;br /&gt;
      retval = true;&lt;br /&gt;
      val = &amp;quot;:&amp;quot; + m.group() + &amp;quot;:&amp;quot;;&lt;br /&gt;
      System.out.println(val);&lt;br /&gt;
      matches++;&lt;br /&gt;
    }&lt;br /&gt;
    String msg = &amp;quot;   NO MATCH: pattern:&amp;quot; + phrase&lt;br /&gt;
        + &amp;quot;\r\n             regex: &amp;quot; + duplicatePattern;&lt;br /&gt;
    if (retval) {&lt;br /&gt;
      msg = &amp;quot; MATCH     : pattern:&amp;quot; + phrase + &amp;quot;\r\n         regex: &amp;quot;&lt;br /&gt;
          + duplicatePattern;&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(msg + &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
    return retval;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Perform credit card validations. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * Licensed to the Apache Software Foundation (ASF) under one or more&lt;br /&gt;
 * contributor license agreements.  See the NOTICE file distributed with&lt;br /&gt;
 * this work for additional information regarding copyright ownership.&lt;br /&gt;
 * The ASF licenses this file to You under the Apache License, Version 2.0&lt;br /&gt;
 * (the &amp;quot;License&amp;quot;); you may not use this file except in compliance with&lt;br /&gt;
 * the License.  You may obtain a copy of the License at&lt;br /&gt;
 *&lt;br /&gt;
 *      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 *&lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 * See the License for the specific language governing permissions and&lt;br /&gt;
 * limitations under the License.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Collection;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;Perform credit card validations.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * By default, all supported card types are allowed.  You can specify which &lt;br /&gt;
 * cards should pass validation by configuring the validation options.  For &lt;br /&gt;
 * example,&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;CreditCardValidator ccv = new CreditCardValidator(CreditCardValidator.AMEX + CreditCardValidator.VISA);&amp;lt;/code&amp;gt;&lt;br /&gt;
 * configures the validator to only pass American Express and Visa cards.&lt;br /&gt;
 * If a card type is not directly supported by this class, you can implement&lt;br /&gt;
 * the CreditCardType interface and pass an instance into the &lt;br /&gt;
 * &amp;lt;code&amp;gt;addAllowedCardType&amp;lt;/code&amp;gt; method.&lt;br /&gt;
 * &amp;lt;/p&amp;gt;&lt;br /&gt;
 * For a similar implementation in Perl, reference Sean M. Burke&amp;quot;s&lt;br /&gt;
 * .&lt;br /&gt;
 *&lt;br /&gt;
 * @version $Revision: 478334 $ $Date: 2006-11-22 21:31:54 +0000 (Wed, 22 Nov 2006) $&lt;br /&gt;
 * @since Validator 1.1&lt;br /&gt;
 */&lt;br /&gt;
public class CreditCardValidator {&lt;br /&gt;
    /**&lt;br /&gt;
     * Option specifying that no cards are allowed.  This is useful if&lt;br /&gt;
     * you want only custom card types to validate so you turn off the&lt;br /&gt;
     * default cards with this option.&lt;br /&gt;
     * &amp;lt;br/&amp;gt;&lt;br /&gt;
     * &amp;lt;pre&amp;gt;&lt;br /&gt;
     * CreditCardValidator v = new CreditCardValidator(CreditCardValidator.NONE);&lt;br /&gt;
     * v.addAllowedCardType(customType);&lt;br /&gt;
     * v.isValid(aCardNumber);&lt;br /&gt;
     * &amp;lt;/pre&amp;gt;&lt;br /&gt;
     * @since Validator 1.1.2&lt;br /&gt;
     */&lt;br /&gt;
    public static final int NONE = 0;&lt;br /&gt;
    /**&lt;br /&gt;
     * Option specifying that American Express cards are allowed.&lt;br /&gt;
     */&lt;br /&gt;
    public static final int AMEX = 1 &amp;lt;&amp;lt; 0;&lt;br /&gt;
    /**&lt;br /&gt;
     * Option specifying that Visa cards are allowed.&lt;br /&gt;
     */&lt;br /&gt;
    public static final int VISA = 1 &amp;lt;&amp;lt; 1;&lt;br /&gt;
    /**&lt;br /&gt;
     * Option specifying that Mastercard cards are allowed.&lt;br /&gt;
     */&lt;br /&gt;
    public static final int MASTERCARD = 1 &amp;lt;&amp;lt; 2;&lt;br /&gt;
    /**&lt;br /&gt;
     * Option specifying that Discover cards are allowed.&lt;br /&gt;
     */&lt;br /&gt;
    public static final int DISCOVER = 1 &amp;lt;&amp;lt; 3;&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * The CreditCardTypes that are allowed to pass validation.&lt;br /&gt;
     */&lt;br /&gt;
    private Collection cardTypes = new ArrayList();&lt;br /&gt;
    /**&lt;br /&gt;
     * Create a new CreditCardValidator with default options.&lt;br /&gt;
     */&lt;br /&gt;
    public CreditCardValidator() {&lt;br /&gt;
        this(AMEX + VISA + MASTERCARD + DISCOVER);&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Create a new CreditCardValidator with the specified options.&lt;br /&gt;
     * @param options Pass in&lt;br /&gt;
     * CreditCardValidator.VISA + CreditCardValidator.AMEX to specify that &lt;br /&gt;
     * those are the only valid card types.&lt;br /&gt;
     */&lt;br /&gt;
    public CreditCardValidator(int options) {&lt;br /&gt;
        super();&lt;br /&gt;
        Flags f = new Flags(options);&lt;br /&gt;
        if (f.isOn(VISA)) {&lt;br /&gt;
            this.cardTypes.add(new Visa());&lt;br /&gt;
        }&lt;br /&gt;
        if (f.isOn(AMEX)) {&lt;br /&gt;
            this.cardTypes.add(new Amex());&lt;br /&gt;
        }&lt;br /&gt;
        if (f.isOn(MASTERCARD)) {&lt;br /&gt;
            this.cardTypes.add(new Mastercard());&lt;br /&gt;
        }&lt;br /&gt;
        if (f.isOn(DISCOVER)) {&lt;br /&gt;
            this.cardTypes.add(new Discover());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Checks if the field is a valid credit card number.&lt;br /&gt;
     * @param card The card number to validate.&lt;br /&gt;
     * @return Whether the card number is valid.&lt;br /&gt;
     */&lt;br /&gt;
    public boolean isValid(String card) {&lt;br /&gt;
        if ((card == null) || (card.length() &amp;lt; 13) || (card.length() &amp;gt; 19)) {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        if (!this.luhnCheck(card)) {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        Iterator types = this.cardTypes.iterator();&lt;br /&gt;
        while (types.hasNext()) {&lt;br /&gt;
            CreditCardType type = (CreditCardType) types.next();&lt;br /&gt;
            if (type.matches(card)) {&lt;br /&gt;
                return true;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Add an allowed CreditCardType that participates in the card &lt;br /&gt;
     * validation algorithm.&lt;br /&gt;
     * @param type The type that is now allowed to pass validation.&lt;br /&gt;
     * @since Validator 1.1.2&lt;br /&gt;
     */&lt;br /&gt;
    public void addAllowedCardType(CreditCardType type){&lt;br /&gt;
        this.cardTypes.add(type);&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Checks for a valid credit card number.&lt;br /&gt;
     * @param cardNumber Credit Card Number.&lt;br /&gt;
     * @return Whether the card number passes the luhnCheck.&lt;br /&gt;
     */&lt;br /&gt;
    protected boolean luhnCheck(String cardNumber) {&lt;br /&gt;
        // number must be validated as 0..9 numeric first!!&lt;br /&gt;
        int digits = cardNumber.length();&lt;br /&gt;
        int oddOrEven = digits &amp;amp; 1;&lt;br /&gt;
        long sum = 0;&lt;br /&gt;
        for (int count = 0; count &amp;lt; digits; count++) {&lt;br /&gt;
            int digit = 0;&lt;br /&gt;
            try {&lt;br /&gt;
                digit = Integer.parseInt(cardNumber.charAt(count) + &amp;quot;&amp;quot;);&lt;br /&gt;
            } catch(NumberFormatException e) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
            if (((count &amp;amp; 1) ^ oddOrEven) == 0) { // not&lt;br /&gt;
                digit *= 2;&lt;br /&gt;
                if (digit &amp;gt; 9) {&lt;br /&gt;
                    digit -= 9;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            sum += digit;&lt;br /&gt;
        }&lt;br /&gt;
        return (sum == 0) ? false : (sum % 10 == 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * CreditCardType implementations define how validation is performed&lt;br /&gt;
     * for one type/brand of credit card.&lt;br /&gt;
     * @since Validator 1.1.2&lt;br /&gt;
     */&lt;br /&gt;
    public interface CreditCardType {&lt;br /&gt;
        &lt;br /&gt;
        /**&lt;br /&gt;
         * Returns true if the card number matches this type of credit&lt;br /&gt;
         * card.  Note that this method is &amp;lt;strong&amp;gt;not&amp;lt;/strong&amp;gt; responsible&lt;br /&gt;
         * for analyzing the general form of the card number because &lt;br /&gt;
         * &amp;lt;code&amp;gt;CreditCardValidator&amp;lt;/code&amp;gt; performs those checks before &lt;br /&gt;
         * calling this method.  It is generally only required to valid the&lt;br /&gt;
         * length and prefix of the number to determine if it&amp;quot;s the correct &lt;br /&gt;
         * type. &lt;br /&gt;
         * @param card The card number, never null.&lt;br /&gt;
         * @return true if the number matches.&lt;br /&gt;
         */&lt;br /&gt;
        boolean matches(String card);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     *  Change to support Visa Carte Blue used in France&lt;br /&gt;
     *  has been removed - see Bug 35926&lt;br /&gt;
     */&lt;br /&gt;
    private class Visa implements CreditCardType {&lt;br /&gt;
        private static final String PREFIX = &amp;quot;4&amp;quot;;&lt;br /&gt;
        public boolean matches(String card) {&lt;br /&gt;
            return (&lt;br /&gt;
                card.substring(0, 1).equals(PREFIX)&lt;br /&gt;
                    &amp;amp;&amp;amp; (card.length() == 13 || card.length() == 16));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
            &lt;br /&gt;
    private class Amex implements CreditCardType {&lt;br /&gt;
        private static final String PREFIX = &amp;quot;34,37,&amp;quot;;&lt;br /&gt;
        public boolean matches(String card) {&lt;br /&gt;
            String prefix2 = card.substring(0, 2) + &amp;quot;,&amp;quot;;&lt;br /&gt;
            return ((PREFIX.indexOf(prefix2) != -1) &amp;amp;&amp;amp; (card.length() == 15));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private class Discover implements CreditCardType {&lt;br /&gt;
        private static final String PREFIX = &amp;quot;6011&amp;quot;;&lt;br /&gt;
        public boolean matches(String card) {&lt;br /&gt;
            return (card.substring(0, 4).equals(PREFIX) &amp;amp;&amp;amp; (card.length() == 16));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private class Mastercard implements CreditCardType {&lt;br /&gt;
        private static final String PREFIX = &amp;quot;51,52,53,54,55,&amp;quot;;&lt;br /&gt;
        public boolean matches(String card) {&lt;br /&gt;
            String prefix2 = card.substring(0, 2) + &amp;quot;,&amp;quot;;&lt;br /&gt;
            return ((PREFIX.indexOf(prefix2) != -1) &amp;amp;&amp;amp; (card.length() == 16));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Represents a collection of 64 boolean (on/off) flags.  Individual flags &lt;br /&gt;
 * are represented by powers of 2.  For example,&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 1 = 1&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 2 = 2&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 3 = 4&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 4 = 8&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
 * or using shift operator to make numbering easier:&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 1 = 1 &amp;amp;lt;&amp;amp;lt; 0&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 2 = 1 &amp;amp;lt;&amp;amp;lt; 1&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 3 = 1 &amp;amp;lt;&amp;amp;lt; 2&amp;lt;br/&amp;gt;&lt;br /&gt;
 * Flag 4 = 1 &amp;amp;lt;&amp;amp;lt; 3&amp;lt;br/&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * There cannot be a flag with a value of 3 because that represents Flag 1 &lt;br /&gt;
 * and Flag 2 both being on/true.&lt;br /&gt;
 * &amp;lt;/p&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @version $Revision: 478334 $ $Date: 2006-11-22 21:31:54 +0000 (Wed, 22 Nov 2006) $&lt;br /&gt;
 */&lt;br /&gt;
class Flags implements Serializable {&lt;br /&gt;
    /**&lt;br /&gt;
     * Represents the current flag state.&lt;br /&gt;
     */&lt;br /&gt;
    private long flags = 0;&lt;br /&gt;
    /**&lt;br /&gt;
     * Create a new Flags object.&lt;br /&gt;
     */&lt;br /&gt;
    public Flags() {&lt;br /&gt;
        super();&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Initialize a new Flags object with the given flags.&lt;br /&gt;
     *&lt;br /&gt;
     * @param flags collection of boolean flags to represent.&lt;br /&gt;
     */&lt;br /&gt;
    public Flags(long flags) {&lt;br /&gt;
        super();&lt;br /&gt;
        this.flags = flags;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns the current flags.&lt;br /&gt;
     *&lt;br /&gt;
     * @return collection of boolean flags represented.&lt;br /&gt;
     */&lt;br /&gt;
    public long getFlags() {&lt;br /&gt;
        return this.flags;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Tests whether the given flag is on.  If the flag is not a power of 2 &lt;br /&gt;
     * (ie. 3) this tests whether the combination of flags is on.&lt;br /&gt;
     *&lt;br /&gt;
     * @param flag Flag value to check.&lt;br /&gt;
     *&lt;br /&gt;
     * @return whether the specified flag value is on.&lt;br /&gt;
     */&lt;br /&gt;
    public boolean isOn(long flag) {&lt;br /&gt;
        return (this.flags &amp;amp; flag) &amp;gt; 0;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Tests whether the given flag is off.  If the flag is not a power of 2 &lt;br /&gt;
     * (ie. 3) this tests whether the combination of flags is off.&lt;br /&gt;
     *&lt;br /&gt;
     * @param flag Flag value to check.&lt;br /&gt;
     *&lt;br /&gt;
     * @return whether the specified flag value is off.&lt;br /&gt;
     */&lt;br /&gt;
    public boolean isOff(long flag) {&lt;br /&gt;
        return (this.flags &amp;amp; flag) == 0;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Turns on the given flag.  If the flag is not a power of 2 (ie. 3) this&lt;br /&gt;
     * turns on multiple flags.&lt;br /&gt;
     *&lt;br /&gt;
     * @param flag Flag value to turn on.&lt;br /&gt;
     */&lt;br /&gt;
    public void turnOn(long flag) {&lt;br /&gt;
        this.flags |= flag;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Turns off the given flag.  If the flag is not a power of 2 (ie. 3) this&lt;br /&gt;
     * turns off multiple flags.&lt;br /&gt;
     *&lt;br /&gt;
     * @param flag Flag value to turn off.&lt;br /&gt;
     */&lt;br /&gt;
    public void turnOff(long flag) {&lt;br /&gt;
        this.flags &amp;amp;= ~flag;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Turn off all flags.&lt;br /&gt;
     */&lt;br /&gt;
    public void turnOffAll() {&lt;br /&gt;
        this.flags = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    /**&lt;br /&gt;
     * Turn off all flags.  This is a synonym for &amp;lt;code&amp;gt;turnOffAll()&amp;lt;/code&amp;gt;.&lt;br /&gt;
     * @since Validator 1.1.1&lt;br /&gt;
     */&lt;br /&gt;
    public void clear() {&lt;br /&gt;
        this.flags = 0;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Turn on all 64 flags.&lt;br /&gt;
     */&lt;br /&gt;
    public void turnOnAll() {&lt;br /&gt;
        this.flags = Long.MAX_VALUE;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Clone this Flags object.&lt;br /&gt;
     *&lt;br /&gt;
     * @return a copy of this object.&lt;br /&gt;
     * @see java.lang.Object#clone()&lt;br /&gt;
     */&lt;br /&gt;
    public Object clone() {&lt;br /&gt;
        try {&lt;br /&gt;
            return super.clone();&lt;br /&gt;
        } catch(CloneNotSupportedException e) {&lt;br /&gt;
            throw new RuntimeException(&amp;quot;Couldn&amp;quot;t clone Flags object.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Tests if two Flags objects are in the same state.&lt;br /&gt;
     * @param obj object being tested&lt;br /&gt;
     * @see java.lang.Object#equals(java.lang.Object)&lt;br /&gt;
     *&lt;br /&gt;
     * @return whether the objects are equal.&lt;br /&gt;
     */&lt;br /&gt;
    public boolean equals(Object obj) {&lt;br /&gt;
        if (!(obj instanceof Flags)) {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        if (obj == this) {&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
        Flags f = (Flags) obj;&lt;br /&gt;
        return this.flags == f.flags;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * The hash code is based on the current state of the flags.&lt;br /&gt;
     * @see java.lang.Object#hashCode()&lt;br /&gt;
     *&lt;br /&gt;
     * @return the hash code for this object.&lt;br /&gt;
     */&lt;br /&gt;
    public int hashCode() {&lt;br /&gt;
        return (int) this.flags;&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns a 64 length String with the first flag on the right and the &lt;br /&gt;
     * 64th flag on the left.  A 1 indicates the flag is on, a 0 means it&amp;quot;s &lt;br /&gt;
     * off.&lt;br /&gt;
     *&lt;br /&gt;
     * @return string representation of this object.&lt;br /&gt;
     */&lt;br /&gt;
    public String toString() {&lt;br /&gt;
        StringBuffer bin = new StringBuffer(Long.toBinaryString(this.flags));&lt;br /&gt;
        for (int i = 64 - bin.length(); i &amp;gt; 0; i--) {&lt;br /&gt;
            bin.insert(0, &amp;quot;0&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        return bin.toString();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simplest validation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class ValidationTest {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    String candidate = &amp;quot;I love Java and jexp&amp;quot;;&lt;br /&gt;
    String pattern = &amp;quot;Java \\d&amp;quot;;&lt;br /&gt;
    System.out.println(candidate.matches(pattern));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Validation with Pattern and Matcher ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.util.regex.Matcher;&lt;br /&gt;
import java.util.regex.Pattern;&lt;br /&gt;
import java.util.regex.PatternSyntaxException;&lt;br /&gt;
public class ValidationTestWithPatternAndMatcher {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Pattern p = null;&lt;br /&gt;
    try {&lt;br /&gt;
      p = Pattern.rupile(&amp;quot;Java \\d&amp;quot;);&lt;br /&gt;
    } catch (PatternSyntaxException pex) {&lt;br /&gt;
      pex.printStackTrace();&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
    String candidate = &amp;quot;I love Java 5&amp;quot;;&lt;br /&gt;
    Matcher m = p.matcher(candidate);&lt;br /&gt;
    System.out.println(&amp;quot;result=&amp;quot; + m.find());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>