문제
나는 함수를 실행하는 사용자 생성 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 구현의 버그처럼 보이지만 유효한 표현식을 제공하면 작동합니다.
한 가지 옵션은 사용자 생성 된 표현식을 검증하는 것입니다. 그건; 당신이 알고있는 캐릭터를 탈출하면 대본을 멈출 것입니다.