Documentation and Books

Recent site activity

How to create a custom validator?

Creating a custom validator is actually quite simple, all validators extend the mx.validators.Validator class. This class contains a doValidation() method which must be overriden that will perform the actual validation. The doValidation() method contains a single argument of the type Object.

Suppose we want to create a validator to validate an IP address:

package validators {

    import mx.validators.ValidationResult;
    import mx.validators.Validator;

    /**
     * Class should extend mx.validators.Validator
     */
    public class IPAddressValidator extends Validator {
   
        public function IPAddressValidator() {
            // Call base class constructor.
            super();
        }

        /**
         * Class should override the doValidation() method.
         * doValidation method should accept an Object type parameter
         */
        override protected function doValidation(value:Object):Array {
            // create an array to return.
            var ValidatorResults:Array = new Array();

            // Call base class doValidation().
            ValidatorResults = super.doValidation(value);      

            // Return if there are errors
            if (ValidatorResults.length > 0) {
                return ValidatorResults;
            }

            // If there is no value then do not perform the IP address validation.
            if (String(value).length == 0) {
                return ValidatorResults;
            }

            // Perform the IP address validation (Must be one line of code)
        var RegPattern:RegExp = /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/;
            var a:Array = RegPattern.exec(String(value));
            if (a == null) {
                ValidatorResults.push(new ValidationResult(true, null, "IPAddress Error","You must enter an IP address"));
                return ValidatorResults;
            }
           
            return ValidatorResults;
        }
    }
}

So now to put the new validator to some use:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:com="*" xmlns:val="flexScript.*">
    <mx:Form>
        <mx:FormHeading label="IP Validator"/>
        <mx:FormItem label="Enter IP Address">
            <mx:TextArea id="ip" />
        </mx:FormItem>
        <mx:FormItem>
            <mx:Button id="button" label="Submit"/>
        </mx:FormItem>
    </mx:Form>
   
    <val:IPAddressValidator source="{ip}" property="text"/>
</mx:Application>