Frage

Ich habe eine Funktion habe, die einen Benutzer erzeugt Regex. Wenn jedoch der Benutzer einen regulären Ausdruck kommt, die nicht dann läuft es stoppt und umfällt. Ich habe versucht, die Linie in einem Try / Catch-Block Einwickeln aber leider nichts passiert.

Wenn es hilft, ich bin mit jQuery aber der Code unten hat es nicht so vermute ich, dass es ein wenig grundsätzlicher ist als das.

Edit: Ja, ich weiß, dass ich nicht die „[“ bin entkommen, das ist absichtlich und der Punkt in Frage. Ich bin eine Benutzereingabe zu akzeptieren, und ich mag einen Weg finden, diese Art von Problem zu fangen, ohne die Anwendung zu fallen flach auf ihrem Gesicht.

<!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>
War es hilfreich?

Lösung

Versuchen Sie das neue RegExp die Ausnahme wirft

        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>

Andere Tipps

Das Problem ist, mit dieser Zeile:

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

‚[‘ ist ein Sonderzeichen, so muss es maskiert werden. Auch diese Linie nicht eingewickelt in try ... catch, so dass Sie immer noch den Fehler.

Bearbeiten : Sie könnte auch hinzufügen, ein

alert(e.message);

in der catch-Klausel die Fehlermeldung zu sehen. Es ist nützlich für alle Arten von Fehlern in Javascript.

Edit 2 : OK, ich brauchte mehr sorgfältig die Frage zu lesen, aber die Antwort ist immer noch da. Im Beispielcode wird die Codezeile im try ... catch-Block nicht umgebrochen. Ich habe es dort und nicht Fehler in Opera 9.5, FF3 und IE7 erhalten.

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');

die RegExp Initialisierung innerhalb des try setzen / catch funktionieren wird (nur in FireFox getestet)


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

hier Flüchten ist nicht die Lösung. Da der Zweck dieses Snippet tatsächlich ist, um eine nutzergenerierten RegExpr zu testen, werden Sie [als unclosed RegExpr Behälter zu fangen.

Ihre RegExp schließt nicht die [

In meinem FireFox, es nie aus dem Konstruktor gibt - sieht aus wie ein Fehler in der Implementierung von RegExp, aber wenn Sie einen gültigen Ausdruck zur Verfügung stellen, es funktioniert

Eine Möglichkeit ist es, die nutzergenerierte Ausdrücke zu validieren. Das ist; Escape-Zeichen, die Sie wissen, wird das Skript abgewürgt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top