wtorek, 27 kwietnia 2010

Flex - Walidator kodu pocztowego z pola tekstowego

Klasa Walidatora oparty na standardowym walidatorze - wykorzystująca lokalne źródła komunikatów
package com.komponenty
{
    import mx.resources.ResourceBundle;
    import mx.resources.ResourceManager;
    import mx.validators.ValidationResult;
    import mx.validators.Validator;
    
    public class KodPocztowyValidator extends Validator
    {
        loadResources();

    [ResourceBundle("validators")]
    
    private static var packageResources:ResourceBundle;
    private static var resourceWrongFormatError:String;                    
    private static var resourceInvalidCharError:String;
    private static var resourceWrongLengthError:String;    

    //--------------------------------------------------------------------------
    //
    //  Class methods
    //
    //--------------------------------------------------------------------------

    /**
     *  @private    
     *  Loads resources for this class.
     */
     
    private static function loadResources():void
    {        
        //ResourceManager.getInstance().localeChain = ["pl_PL"];
        resourceInvalidCharError = ResourceManager.getInstance().getString("validators","InvalidCharError");            
        resourceWrongLengthError = ResourceManager.getInstance().getString("validators","wrongLengthError");
        resourceWrongFormatError = ResourceManager.getInstance().getString("validators","wrongFormatError");
    }
    
    
    public static function validateKodPocztowy(validator:KodPocztowyValidator,
                                           value:Object,
                                           baseField:String):Array
    {
        var results:Array = [];
    
        var zip:String = String(value);
        var len:int = zip.length;
         var n:int;
        var i:int;
        
        // Sprawdz czy jest ciąg znakow zawiera prawidłowy format    
        for (i = 0; i < len; i++)
        {
            if (DECIMAL_DIGITS.indexOf(zip.charAt(i)) == -1 && zip.charAt(i) != "-")
            {       
                results.push(new ValidationResult(
                    true, baseField, "resourceInvalidCharError",
                    validator.invalidCharError));
                return results;
            }
        }
                
        //Sprawdz czy format jest prawidlowy
        if (len == 6) 
        {                        
            if ((DECIMAL_DIGITS.indexOf(zip.charAt(0)) == -1)||
               (DECIMAL_DIGITS.indexOf(zip.charAt(1)) == -1)||
               (zip.charAt(2)!="-")||
               (DECIMAL_DIGITS.indexOf(zip.charAt(3)) == -1)||
               (DECIMAL_DIGITS.indexOf(zip.charAt(4)) == -1)||
               (DECIMAL_DIGITS.indexOf(zip.charAt(5)) == -1)
               )
                {
                    
                    results.push(new ValidationResult(
                        true, baseField, "wrongFormatError",
                        validator.invalidFormatError));
                    return results;                    
                }
                                
        }        
        else
        {
            results.push(new ValidationResult(
                true, baseField, "wrongLength",
                validator.wrongLengthError));
            return results;
        }

        return results;
    }

        
        
        
    public function KodPocztowyValidator()
    {
        super();
        bundleChanged();
    }

    //--------------------------------------------------------------------------
    //
    //  Properties: Errors
    //
    //--------------------------------------------------------------------------

    [Inspectable(category="Errors", defaultValue="Nieprawidłowe znaku w kodzie pocztowym")]
    public var invalidCharError:String;
    
    [Inspectable(category="Errors", defaultValue="Kod pocztowy musi być 6 znakowy w formacie 99-999")]
    public var invalidFormatError:String;
    
    [Inspectable(category="Errors", defaultValue="Zbyt duża ilość znaków w kodzie pocztowy")]
    public var wrongLengthError:String;
    
    //--------------------------------------------------------------------------
    //
    //  Overridden methods
    //
    //--------------------------------------------------------------------------
      
    override protected function doValidation(value:Object):Array
    {
        var results:Array = super.doValidation(value);
        
        // Return if there are errors
        // or if the required property is set to false and length is 0.
        var val:String = value ? String(value) : "";
        if (results.length > 0 || ((val.length == 0) && !required))
            return results;
        else
            return KodPocztowyValidator.validateKodPocztowy(this, value, null);
    }

    //--------------------------------------------------------------------------
    //
    //  Methods
    //
    //--------------------------------------------------------------------------

    /**
     *  @private    
     *  Populates localizable properties from the loaded bundle for this class.
     */
    private function bundleChanged():void
    {            
        invalidCharError = resourceInvalidCharError;
        wrongLengthError = resourceWrongLengthError;
        invalidFormatError = resourceWrongFormatError;    
    }
        
    }
} 

Brak komentarzy:

Prześlij komentarz