Pregunta

Tengo una función que se ejecuta un usuario genera Regex.Sin embargo, si el usuario introduce una expresión regular que no se ejecutan luego se detiene y se cae.He tratado de envolver la línea en un bloque Try/Catch, pero por desgracia no pasa nada.

Si ayuda, yo estoy usando jQuery, pero el código de abajo no tiene como supongo que es un poco más profundo que eso.

Editar:Sí, sé que no soy escapar de la "[", que es intencional y el punto de la cuestión.Estoy de aceptar la entrada del usuario y quiero encontrar una manera de detectar este tipo de problema, sin la aplicación de la caída plana en su cara.

<!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>
¿Fue útil?

Solución

Pruebe esta el nuevo RegExp es lanzar 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>

Otros consejos

El problema es que con esta línea:

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

'[' es un carácter especial por lo que necesita ser escapado.También esta línea no está envuelto en try...catch, así que sigue apareciendo el error.

Editar:También puede agregar un

alert(e.message);

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

Edit 2:OK, yo tenía que leer más detenidamente la pregunta, pero la respuesta aún está allí.En el código de ejemplo de los infractores de la línea no está envuelto en el bloque try...catch.Pongo allí y no obtener errores en el Opera 9.5, FF3 y 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');

poner la RegExp de inicialización dentro del try/catch va a trabajar (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 de aquí no es la solución.Ya que el propósito de este fragmento es en realidad una prueba generados por el usuario RegExpr, usted va a querer coger [ como un mal cerradas RegExpr contenedor.

su RegExp no cierra la [

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

Una opción es validar el generado por el usuario expresiones.Que es;los caracteres de escape que usted sabe que le puesto el script.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top