2013-06-22 62 views
36

如何在JavaScript中檢查字符串是否是一個能編譯的正確的正則表達式?如何檢查輸入字符串是否是有效的正則表達式?

例如,當您執行以下JavaScript時,它會產生錯誤。

var regex = new RegExp('abc ([a-z]+) ([a-z]+))'); 
// produces: 
// Uncaught SyntaxError: Invalid regular expression: /abc ([a-z]+) ([a-z]+))/: Unmatched ')' 

如何確定字符串是否是有效的正則表達式?

+6

你需要一個正則表達式來測試一個正則表達式嗎?大聲笑 –

+0

要求免費的代碼是不是如何Stackoverflow的工作 – Bojangles

+0

請清楚指定您的代碼,我們將幫助您 –

回答

49

您可以使用try/catchRegExp構造:

var isValid = true; 
try { 
    new RegExp("the_regex_to_test_goes_here"); 
} catch(e) { 
    isValid = false; 
} 

if(!isValid) alert("Invalid regular expression"); 
+0

我測試它,但不能正常工作:( –

+1

@傑克:如果你提供了更多關於什麼「不起作用」的信息,那麼我們可以幫助你,但只是說「它不工作」什麼都沒有,你嘗試了什麼輸入?你得到了什麼輸出?你是否得到了一個不同的錯誤? –

+0

我替換了我的文本框值而不是the_regex_to_test_goes_here,但它不確定文本框的值是否有效。我的問題信息足夠了嗎? –

5

這裏是一個小功能,檢查這兩種類型的正則表達式,字符串或模式的有效性:

function validateRegex(pattern) { 
    var parts = pattern.split('/'), 
     regex = pattern, 
     options = ""; 
    if (parts.length > 1) { 
     regex = parts[1]; 
     options = parts[2]; 
    } 
    try { 
     new RegExp(regex, options); 
     return true; 
    } 
    catch(e) { 
     return false; 
    } 
} 

用戶將例如能夠測試test/test/gHere是一個工作小提琴。

+0

@JakSamun你試過了嗎? –

+0

這個函數允許任意的字符串,所以我不確定這是做什麼運算 –

+0

(你downvote?大聲笑)我的答案和其他答案基本上做同樣的事情,除了我也考慮到可能的選項在模式內。而且,說實話,OP想要的只是「檢查輸入字符串是否是有效的正則表達式」;特別是輸入長度沒有限制,所以任何字符串都可以作爲輸入傳遞。而且,我正在做他正在做的事情,甚至返回適當的真實或錯誤的價值。 –

相關問題