2011-12-30 7 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

당신은 문자 정규식을 사용하는 대신 문자열에서 정규식을 구성해야합니다

.

대신이 같은 정규식을 만드는 :

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

관련 문제