2008-09-23 10 views
5

Tengo una función que ejecuta un Regex generado por el usuario. Sin embargo, si el usuario ingresa una expresión regular que no se ejecutará, se detendrá y desaparecerá. Intenté ajustar la línea en un bloque Try/Catch, pero desafortunadamente no pasa nada.Javascript Try/Catch

Si ayuda, estoy ejecutando jQuery pero el código siguiente no lo tiene porque supongo que es un poco más fundamental que eso.

Editar: Sí, sé que no estoy escapando del "[", eso es intencional y el objetivo de la pregunta. Estoy aceptando la entrada del usuario y quiero encontrar una manera de detectar este tipo de problema sin que la aplicación caiga de bruces.

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

Lo revisé, al menos 4 veces. Es un caso en que alguien más es mucho mejor al detectar ese error tonto que haces, es posible que lo hayas encontrado tú mismo. – Teifion

+1

@Geoffrey: En realidad, es JavaScript. –

Respuesta

17

probar este nuevo RegExp está lanzando la excepción

Regex

<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

El problema es con esta línea:

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

'[' es un carácter especial por lo que debe ser escapado. Además, esta línea no está engarzada en try ... catch, por lo que aún obtienes el error.

Editar: También puede añadir un

alert(e.message); 

en la cláusula catch para ver el mensaje de error. Es útil para todo tipo de errores en javascript.

Editar 2: Bueno, necesitaba leer más detenidamente la pregunta, pero la respuesta todavía está allí. En el código de ejemplo, la línea ofensiva no está envuelta en el bloque try ... catch. Lo puse allí y no obtuve errores en Opera 9.5, FF3 e IE7.

+0

Te has perdido la pregunta en sí – Teifion

+0

Sí, he visto eso ahora en la respuesta de Paul. Fue un simple caso de que yo fuera más estúpido. Gracias por la ayuda de todos modos :) – Teifion

1

su RegExp no cierra la [

En mi FireFox, nunca regresa desde el constructor - se parece a un error en la implementación de expresión regular, pero si usted proporciona una expresión válida, funciona

+0

Al igual que con rslite, te has perdido la pregunta real, quiero encontrar una manera de ejecutar dicha expresión regular y atrapar el error resultante – Teifion

0

Una opción es para validar las expresiones generadas por el usuario. Es decir; escapar de los personajes que sabes que detendrán tu guión.

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

poner la inicialización RegExp dentro del try/catch funcionará (solo probado en 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 
 

Escapar aquí no es la solución. Dado que el propósito de este fragmento es realmente probar un RegExpr generado por el usuario, querrá atrapar [como un contenedor RegExpr no cerrado.