Java脚本尝试/捕获

时间:2020-03-06 14:35:44  来源:igfitidea点击:

我有一个运行用户生成的Regex的函数。但是,如果用户输入了不会运行的正则表达式,则它将停止并翻倒。我尝试将行包装在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>

解决方案

问题在于此行:

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

'['是一个特殊字符,因此需要转义。另外,该行没有包装在try ... catch中,因此我们仍然会收到错误。

编辑:我们也可以添加一个

alert(e.message);

在catch子句中查看错误消息。对于javascript中的各种错误很有用。

编辑2:好的,我需要更仔细地阅读问题,但是答案仍然存在。在示例代码中,违规行未包装在try ... catch块中。我把它放在那里,在Opera 9.5,FF3​​和IE7中没有出现错误。

RegExp无法关闭[

在我的FireFox中,它永远不会从构造函数中返回-看起来就像RegExp实现中的错误,但是如果我们提供有效的表达式,它就可以工作

试试这个新的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, 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容器。