             }
         }
 
-        if ((decimalSeparator == groupingSeparator) ||
-            (negativeSymbol == groupingSeparator) ||
-            (decimalSeparator == negativeSymbol))
+        if (decimalSeparator == groupingSeparator)
         {
             results.push(new ValidationResult(
                true, baseField, "invalidFormatChars", invalidFormatCharsError));
             return false;
         }
-        // handle "-." special case
-        else if (input == (negativeSymbol + decimalSeparator))
+        else if (inputHasNoDigits(input))
         {
             results.push(new ValidationResult(
-                true, baseField, "invalidChar", invalidCharError));
+                true, baseField, "parseError", parseError));
             return false;
         }
-        // handle "(.)" special case
-        else if (input == ("(" + decimalSeparator + ")"))
-        {
-            results.push(new ValidationResult(
-                true, baseField, "invalidChar", invalidCharError));
-            return false;
-        }
-        else if (input.indexOf(negativeSymbol) !=
-                 input.lastIndexOf(negativeSymbol))
-        {
-
+        else if (inputHasMultipleNegativeSymbols(input))
+        {
             results.push(new ValidationResult(
                     true, baseField, "negativeSymbol", negativeSymbolError));
             return false;

    protected var notAnIntegerErrorOverride:String;
    
    [Inspectable(category="Errors", defaultValue="null")]
    
    /**
     *  Error message when the number must be an integer, as defined
     *  by the <code>domain</code> property.

    protected var fractionalDigitsErrorOverride:String;
    
    [Inspectable(category="Errors", defaultValue="null")]
    [Bindable("change")]
    /**
     *  Error message when fraction digits exceeds the value specified
     *  by the fractionalDigits property.
