我有一个类用于验证输入字段以确保该值始终为小数。我在这里测试了正则表达式: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是先前创建的输入框。
显然,我错过了一些简单但重要的东西,但我不完全确定是什么!任何帮助将不胜感激。答案 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+)$";