RegExpValidator никогда не совпадает - PullRequest
0 голосов
/ 05 июня 2010

У меня есть класс, который предназначен для проверки полей ввода, чтобы убедиться, что значение всегда является десятичным. Я протестировал регулярное выражение здесь: 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 ]

1 голос
/ 05 июня 2010

Я не знаю ActionScript, но, насколько мне известно, это язык ECMAScript, поэтому я ожидаю, что вам нужно избежать обратной косой черты, если вы используете строку для определения регулярного выражения:

isDecimalValidator.expression       = "^-?(\\d+\\.\\d*|\\.\\d+)$";
1 голос
/ 05 июня 2010

Это кажется мне неправильным; но я не могу понять, как это сделать. Для вашего 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 является локальной переменной метода, а не глобальным свойством функции.

protected var dValidator:DecimalValidator = new DecimalValidator();

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

}

Я не уверен, почему вы устанавливаете ограничения на TextInput в методе registerDecimalInputValidator; это должно быть сделано при создании метода (в createChildren () или, возможно, в ответ на изменение открытых свойств, в commitProperties. Мне также не очевидно, что делает validatorArr. Если вы ожидаете получить доступ к значениям внутри validatorArrray за пределами метода; часто это обычная практика - возвращать это значение из метода. Без поиска; я не уверен, передаются ли массивы по значению или по ссылке во Flex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...