flex regex, добавить доступную строку в regexp - PullRequest
0 голосов
/ 30 декабря 2011

В приведенном ниже коде, если я заменяю st2 на шаблон регулярного выражения без кавычек, он работает нормально.Теперь, поскольку я получаю регулярное выражение из какого-то другого файла, как показано в st2.Я хочу добавить это в шаблон регулярных выражений.Но, как в приведенном ниже коде, он не работает.

<fx:Script>

import mx.controls.Alert

public function onClicking(){

    Alert.show("User says:" + textinput.text + " is new.");

}
public function checkValue(inputValue:String):void{

    var st2="[0-9]|[12][0-9]|3[01]";
    var pattern:RegExp = /^(st2)$/;
    var str:String = textinput.text;
    if(pattern.test(str)){
    Alert.show("pass");
    }
    else{
        Alert.show("fail");
    }



}
</fx:Script>

1 Ответ

2 голосов
/ 30 декабря 2011

Вам нужно будет создать свой RegExp из строки вместо использования литерала регулярного выражения.

Вместо создания своего регулярного выражения, как это:

var st2="[0-9]|[12][0-9]|3[01]";
var pattern:RegExp = /^(st2)$/;

Создайте это так:

var st2:String ="[0-9]|[12][0-9]|3[01]";
var pattern:RegExp = new RegExp("^(" + st2 + ")$");

Просто имейте в виду, что вам нужно быть более осторожным с экранированием (и двойным экранированием) с помощью этого конструктора таких вещей, как обратная косая черта.

Причина в том, что первая нотация является литералом регулярного выражения - вы вводите значение переменной st2, вы помещаете литерал текст "st2" в регулярное выражение.

Возможно, было бы яснее взглянуть на это так - представьте, что вы сделали это:

var st2:String ="123";
var st3:String = "abc st2";

Понятно, что переменная st3 не должна содержать «abc 123» - потому что вы не ссылаетесь на переменную st2, вы вместо этого вставляете буквальный текст. Это та же самая причина, по которой он не работал с буквенной нотацией RegExp (то есть с использованием двух косых черт).

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