2008-09-23 11 views
5

私は、ユーザ生成Regexを実行する関数を持っています。しかし、ユーザーが実行しない正規表現を入力すると、正規表現は停止して転倒します。 Try/Catchブロックで行を折り返してみましたが、何も起こりません。Javascript試してみる/キャッチ

私はjQueryを実行していますが、それよりも基本的なことを推測しているので、以下のコードにはありません。

編集:はい、私は "["、それは意図的で質問のポイントです。私はユーザーの入力を受け入れているので、アプリケーションが面倒でなくてもこの種の問題を捉える方法を見つけたいと思っています。

<!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> 
+4

私はそれを少なくとも4回校正しました。あなたが作ったばかげた間違いを見つけ出すのが他の誰かのほうがはるかに優れているケースです。自分でそれを見つけたかもしれません。 – Teifion

+1

@Geoffrey:実際はJavaScriptです。 –

答えて

17

新しい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> 
を例外をスローして、これを試してみてください

8

問題は、この行である:それはエスケープする必要がありますので

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

は、 '[' の特殊文字です。また、この行はtry ... catchでラップされていないので、まだエラーが発生します。

編集:あなたはまた、エラーメッセージを確認するためにcatch節で

alert(e.message); 

を追加することができます。それはJavaScriptのすべての種類のエラーに便利です。

編集2:OK、私は質問をもっと慎重に読む必要がありましたが、回答はまだあります。このコード例では、問題の行はtry ... catchブロックにラップされていません。 Opera 9.5、FF3、IE7でエラーを表示しませんでした。

+0

あなたは質問自体を見逃してしまった – Teifion

+0

ええ、私はポールの答えでこれを見ました。私が余計にばかげているのは簡単なケースでした。とにかく助けをありがとう:) – Teifion

1

あなたの正規表現は、私のFirefoxで[

を閉じていない、それは決してコンストラクタから返さない - 正規表現の実装のバグのように見えますが、あなたは有効な式を提供する場合、それは

の作品
+0

rsliteと同様に、あなたは実際の質問を見逃してしまった、私はそのような正規表現を実行し、結果のエラーをキャッチする方法を見つける – Teifion

0

1つのオプションは、ユーザーが生成した式を検証することです。あれは;あなたが知っているエスケープ文字はあなたのスクリプトをストールします。ここでエスケープ

のtry/catch内の正規表現の初期化が(ちょうどFirefoxでテストした)動作します入れ
4
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'); 
2


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コンテナとしてキャッチすることをお勧めします。

関連する問題