[英]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.