문제

나는 함수를 실행하는 사용자 생성 Regex.그러나,경우에는 사용자가 입력한 정규 표현식이 실행되지 않는 한 다음 그것을 중지하고 떨어진다.해봤의 라인을 포장에서 시도/을 잡을 차단 하지만 슬프게도 아무 일도 일어나지 않습니다.

도움이 된다면,내가 실행 jQuery 지만 코드는 아래 있지 않은것으로 추측하는 좀 더 근본적인입니다.

편집:Yes,I know that I am 지 않을 탈출"[",그 의도와의 포인트는 질문입니다.나는 받아들이 사용자 입력을 찾고 싶을 잡을 수있는 방법의 이런 종류의 문제 없이 응용 프로그램에 그것의 얼굴입니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <title>Regex</title>

    <script type="text/javascript" charset="utf-8">
        var grep = new RegExp('gr[');

        try
        {
            var results = grep.exec('bob went to town');
        }
        catch (e)
        {
            //Do nothing?
        }

        alert('If you can see this then the script kept going');
    </script>
</head>
<body>

</body>
</html>
도움이 되었습니까?

해결책

새로운 Regexp가 예외를 던지고 있습니다

성과선

    <script type="text/javascript" charset="utf-8">
            var grep;

            try {
                    grep = new RegExp("gr[");
            }
            catch(e) {
                    alert(e);

            }
            try
            {
                    var results = grep.exec('bob went to town');
            }
            catch (e)
            {
                    //Do nothing?
            }

            alert('If you can see this then the script kept going');
    </script>

다른 팁

문제는 이 라인:

var grep = new RegExp('gr[');

'['특별한 문자할 필요가 있으므로 탈출했다.또한 이는 선하지 않은 싸 catch,그래서 당신은 여전히 오류가 있습니다.

편집:수도 추가

alert(e.message);

catch 절을 참조 오류 메시지가 표시됩니다.그것은 유용한 모든 종류의 오류에 javascript.

편집 2:OK,I 필요한 자세한 주의깊게 질문,하지만 그 대답은 아직도있다.예제 코드에서 문제가 되는 라인이 포장되지 않습에서도...하고 있습니다.나는 그것이있지 않았을 얻는 오류를 오페라 9.5,FF3 및 IE7.

var grep, results;

try {
    grep = new RegExp("gr[");
    results = grep.exec('bob went to town');
}
catch(e) {
    alert(e);
}
alert('If you can see this then the script kept going');

Regexp 초기화를 시도/캐치 내부에 넣는 것이 작동합니다 (Firefox에서 테스트)


var grep, results;

try
{
    grep = new RegExp("gr["); // your user input here
}
catch(e)
{
    alert("The RegExpr is invalid");
}

// do your stuff with grep and results

여기서 탈출하는 것은 해결책이 아닙니다. 이 스 니펫의 목적은 실제로 사용자가 생성 한 RegexPR을 테스트하는 것이므로 [탈지되지 않은 RegexPR 컨테이너로 잡으십시오.

당신의 regexp는 [

내 Firefox에서는 생성자에서 돌아 오지 않습니다. RegexP 구현의 버그처럼 보이지만 유효한 표현식을 제공하면 작동합니다.

한 가지 옵션은 사용자 생성 된 표현식을 검증하는 것입니다. 그건; 당신이 알고있는 캐릭터를 탈출하면 대본을 멈출 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top