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> |
