             
             for (;i < len; i++)
             {
+                c0 = input.charCodeAt(i);
+                c32 = processSurrogates(input, c0, i, len);
+                if (c32 == -1)
+                {
+                    results.push(new ValidationResult(
+                        true, baseField, "invalidChar", invalidCharError));
+                    return false;
+                }
+                if (c0 != c32)
+                    i++; // surrogate found. increment index of lower surrogate.
                 ++numDigitsAfterDecimal;
                 // break at ) or - or currency string when validatng fractions.
-                if (DECIMAL_DIGITS.indexOf(input.charAt(i)) == -1)
+                if (!isDigit(c32))
                     break;
                 
                 // Make sure fractionalDigits is not exceeded.

    }

    /**
     *  @private
     *  Load the error strings overrides.
     */
    mx_internal function loadChangedResources():void
    {
        allowNegative = allowNegativeOverride;
        domain = domainOverride;
        maxValue = maxValueOverride;
        minValue = minValueOverride;
        decimalPointCountError = decimalPointCountErrorOverride;
        greaterThanMaxError = greaterThanMaxErrorOverride;
        notAnIntegerError = notAnIntegerErrorOverride;

    
    public function set lessThanMinError(value:String):void
    {
        if (lessThanMinErrorOverride &&
            (lessThanMinErrorOverride == value))
            return;
        
        lessThanMinErrorOverride = value;
        
        _lessThanMinError = value ? value :
            resourceManager.getString("validators", "lowerThanMinError");
        update();
    }

    //----------------------------------
