2013-04-23 73 views
4

我正在用javascript編寫應用程序。在我的應用程序中有一個選項來搜索字符串/正則表達式。如果用戶鍵入錯誤的值,則問題是匹配返回javascript錯誤。 示例代碼:javascript語法錯誤:無效的正則表達式

function myFunction() { 
     var filter = $("#text_id").val(); 
     var query = "select * from table"; 
     var found; 
     if (query.match(filter) != -1) { 
     found = true; 
     } 
     else{ 
     found = false; 
     } 
     //Do something 
    } 

的jsfiddle:http://jsfiddle.net/ZVNMq/

輸入字符串:sel/\

匹配的回報JS錯誤 - Uncaught SyntaxError: Invalid regular expression: /sel\/: \ at end of pattern.

有沒有什麼辦法來檢查字符串是否是有效的正則表達式或不?

+1

'try catch'是最快和無痛的方式。 – nhahtdh 2013-04-23 11:44:59

+0

在任何情況下,聆聽nhahtdh的建議都是一個好主意。在你的具體情況下,你必須逃避逃生符號'\'。一般來說,如果允許模式的未經驗證的用戶輸入,您應該在正則表達式中轉義所有具有特殊含義的字符。如果您恰好將數據存儲在dom節點中,則可能無需付出額外的努力。 – collapsar 2013-04-23 11:51:18

回答

7

使用try-catch語句:

function myFunction() { 
    var filter = $("#text_id").val(); 
    var query = "select * from table"; 
    try { 
     var regex = new RegExp(filter); 
    } catch(e) { 
     alert(e); 
     return false; 
    } 
    var found = regex.test(query); 
} 
0

也許你應該試試 「變種查詢」 之前逃離線路上的斜線。 如果你想在正則表達式中搜索一個斜槓字符串,它必須被轉義,否則正則表達式會將其作爲保留字符讀取。

11

在這種情況下,你實際上並沒有需要正則表達式,但如果你想避免你的表達無效字符,你應該逃避它:

RegExp.quote = function(str) { 
    return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); 
}; 

用法:

var re = new RegExp(RegExp.quote(filter)); 

沒有一個正則表達式,你可以做到這一點:

if (query.indexOf(filter) != -1) { 
} 
+0

我的情況並不需要正則表達式。簡單搜索。感謝您指出了這一點! – gregblass 2017-06-13 03:52:26

相關問題