Domanda

Ho una funzione che esegue un Regex generato dall'utente. Tuttavia, se l'utente inserisce una regex che non verrà eseguita, si arresterà e cadrà. Ho provato a avvolgere la linea in un blocco Try / Catch ma purtroppo non succede nulla.

Se aiuta, sto eseguendo jQuery ma il codice qui sotto non ce l'ha perché immagino che sia un po 'più fondamentale di così.

Modifica: Sì, so che non sto sfuggendo al " [" ;, che è intenzionale e il punto della domanda. Sto accettando l'input dell'utente e voglio trovare un modo per risolvere questo tipo di problema senza che l'applicazione si stacchi sulla sua faccia.

<!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>
È stato utile?

Soluzione

Prova questo il nuovo RegExp lancia l'eccezione

        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>

Altri suggerimenti

Il problema è con questa riga:

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

'[' è un personaggio speciale, quindi deve essere evaso. Anche questa riga non è racchiusa in try ... catch, quindi ricevi ancora l'errore.

Modifica : puoi anche aggiungere un

alert(e.message);

nella clausola catch per vedere il messaggio di errore. È utile per tutti i tipi di errori in JavaScript.

Modifica 2 : OK, avevo bisogno di leggere più attentamente la domanda, ma la risposta è ancora lì. Nel codice di esempio la linea offensiva non è racchiusa nel blocco try ... catch. L'ho messo lì e non ho ricevuto errori in Opera 9.5, FF3 e 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');

inserendo l'inizializzazione RegExp in try / catch funzionerà (appena testato in 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

Scappare qui non è la soluzione. Poiché lo scopo di questo frammento è effettivamente testare un RegExpr generato dall'utente, ti consigliamo di catturare [come contenitore RegExpr non chiuso.

il tuo RegExp non chiude il [

Nel mio FireFox, non ritorna mai dal costruttore - sembra un bug nell'implementazione di RegExp, ma se si fornisce un'espressione valida, funziona

Un'opzione è convalidare le espressioni generate dall'utente. Questo è; i caratteri di escape che sai bloccheranno la tua sceneggiatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top