2011-12-30 13 views
0

次のコードでは、st2を引用符なしのregexpのパターンに置き換えてもうまく動作します。 st2にあるように、他のファイルから正規表現を取得しています。私はそれを正規表現パターンに追加したいと思います。しかし、以下のコードのように、それは動作しません。flex regex regexpで使用可能な文字列を追加

<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

かわりに、正規表現リテラルを使用しての文字列から、あなたの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」を入れています。

それで、この方法を見て明確であるかもしれない - あなたはこの行っていたと想像: - あなたが参照されていないので、それはst3変数が「ABC 123」を含むべきではないことは明らかだ

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

st2変数ではなく、リテラルテキストを入力しています。これは、RegExpのリテラル表記(つまり、2つのスラッシュを使用)で動作しなかったのと同じ理由です。

+0

ありがとうSly_cardinal。それは非常に明確な説明でした。 – randeepsp

関連する問題