flex regex,在regex中添加一个可用的字符串

时间:2011-12-30 11:16:04

标签: regex flex

在下面的代码中如果我将st2替换为没有引号的regexp模式,它可以正常工作。 现在,因为我从其他文件中获取正则表达式,如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 个答案:

答案 0 :(得分:2)

您需要从字符串构造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”放入正则表达式。< / p>

以这种方式看待它可能更清楚 - 假设你已经这样做了:

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

很明显,st3变量不应包含“abc 123” - 因为您没有引用st2变量,而是放入文字文本。这与它不使用RegExp文字符号(即使用两个正斜杠)的原因相同。