2011-12-30 72 views
0

在下面的代码中,如果我将st2替换为不带引号的正则表达式模式,它可以正常工作。 现在,因为我从其他文件中获得正则表达式,正如它在st2中所示。我想添加到正则表达式模式。但在下面的代码中,它不起作用。flex正则表达式,在正则表达式中添加一个可用的字符串

<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> 

回答

2

您将需要从字符串中创建您的正则表达式,而不是使用正则表达式字面的。

而不是创建您的正则表达式是这样的:

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文字表示法(即使用两个正斜杠)是一样的原因。

+0

谢谢Sly_cardinal。这是一个非常明确的解释。 – randeepsp 2012-01-02 04:25:45