RegExpValidator从不匹配

时间:2010-06-05 16:33:57

标签: regex flex actionscript-3 validation

我有一个类用于验证输入字段以确保该值始终为小数。我在这里测试了正则表达式:http://livedocs.adobe.com/flex/3/html/help.html?content=validators_7.html,看起来它做的正确,但在我的应用程序中,我似乎无法将其与数字格式匹配。

班级定义:

public class DecimalValidator {
    //------------------------------- ATTRIBUTES
    public var isDecimalValidator:RegExpValidator;

    //------------------------------- CONSTRUCTORS
    public function DecimalValidator() { 
        isDecimalValidator                  = new RegExpValidator();
        isDecimalValidator.expression       = "^-?(\d+\.\d*|\.\d+)$";
        isDecimalValidator.flags            = "g";
        isDecimalValidator.required         = true;
        isDecimalValidator.property         = "text";
        isDecimalValidator.triggerEvent     = FocusEvent.FOCUS_OUT;
        isDecimalValidator.noMatchError     = "Float Expected";
    }

}

在此处设置来源:

public function registerDecimalInputValidator(inputBox:TextInput, valArr:Array):void  {
        // Add Validators
        var dValidator:DecimalValidator = new DecimalValidator();
        dValidator.isDecimalValidator.source = inputBox;
        dValidator.isDecimalValidator.trigger = inputBox;

        inputBox.restrict = "[0-9].\\.\\-";
        inputBox.maxChars = 10;

        valArr.push(dValidator.isDecimalValidator);
    }

在这里打电话:

registerDecimalInputValidator(textInput, validatorArr);

textInput是先前创建的输入框。

显然,我错过了一些简单但重要的东西,但我不完全确定是什么!任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这让我觉得错误;但我不能完全把手指放在上面。对于你的DecimalValidator,而不是组成一个RegExpValidator;为什么不延长它?

public class DecimalValidator extend RegExpValidator{

//------------------------------- CONSTRUCTORS
public function DecimalValidator() {
   super()

    this.expression       = "^-?(\d+\.\d*|\.\d+)$";
    this.flags            = "g";
    this.required         = true;
    this.property         = "text";
    this.triggerEvent     = FocusEvent.FOCUS_OUT;
    this.noMatchError     = "Float Expected";
}
}

registerdecimalInputValidator何时被调用?我有点担心Validator实例是方法的局部变量而不是函数的'global'属性。

protected var dValidator:DecimalValidator = new DecimalValidator();

public function registerDecimalInputValidator(inputBox:TextInput):void  {
    dValidator.isDecimalValidator.source = inputBox;
    dValidator.isDecimalValidator.trigger = inputBox;

}

我不确定为什么要在registerDecimalInputValidator方法中对TextInput设置限制;应该在创建方法时(在createChildren()中或者可能在commitProperties中响应公共属性更改时完成。对我来说,validatorArr的作用也不明显。如果您希望访问validatorArrray内部的值该方法通常是一种常见的做法,从方法中返回该值。没有查找;我不确定Arrays是否通过Flex中的值或引用传递。

答案 1 :(得分:1)

我不知道ActionScript,但据我所知它是一种ECMAScript语言,所以如果你使用字符串来定义一个正则表达式,我希望你需要转义反斜杠:

isDecimalValidator.expression       = "^-?(\\d+\\.\\d*|\\.\\d+)$";