簡體   English   中英

Javascript Try / Catch

[英]Javascript Try/Catch

我有一個運行用戶生成的正則表達式的函數。 但是,如果用戶輸入了不會運行的正則表達式,則它會停止並翻倒。 我已經嘗試在Try / Catch塊中包裝該行但是沒有任何反應。

如果它有幫助,我正在運行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>

試試這個新的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>

問題出在這一行:

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

'['是一個特殊字符,因此需要進行轉義。 此行也不包含在try ... catch中,因此您仍然會收到錯誤。

編輯 :你也可以添加一個

alert(e.message);

在catch子句中查看錯誤消息。 它對javascript中的所有錯誤都很有用。

編輯2 :好的,我需要仔細閱讀這個問題,但答案仍然存在。 在示例代碼中,違規行未包含在try ... catch塊中。 我把它放在那里,並沒有在Opera 9.5,FF3​​和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');

將RegExp初始化放在try / catch中將起作用(僅在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

逃避這里不是解決方案。 由於此代碼段的目的是實際測試用戶生成的RegExpr,因此您需要捕獲[作為未關閉的RegExpr容器。

你的RegExp沒有關閉[

在我的FireFox中,它永遠不會從構造函數返回 - 看起來像是RegExp實現中的一個錯誤,但是如果你提供一個有效的表達式,它就有效

一種選擇是驗證用戶生成的表達式。 那是; 你知道的轉義字符會使你的腳本失效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM