2012-08-27 22 views
4

是否存在一個現有函數(或者可能有人編寫了一些現有代碼)在JS函數中驗證文本傳遞的是有效的PCRE?我一直在瘋狂Google搜索,但是我能找到的最接近的東西就是「PCRE_JAVASCRIPT_COMPAT」(這是一個PCRE兼容性標誌)或關於在PHP和Javascript中驗證輸入的討論。在Javascript函數中驗證PHP(PCRE)

我見過爲Javascript正則表達式驗證最接近的事是:

try { 
    "".match(regex); 
    return true; 
} catch (e) { 
    return false; 
} 

這並沒有考慮到正則表達式和PHP(PCRE)正則表達式JS(ECMA)之間的差異 - 這顯然是一個問題,但我還沒有找到兩者之間差異的明確討論。

請幫忙嗎?

+0

好吧,如果你與JS工作,接收PCRE與PHP一起使用,這意味着您將收到它服務器。你可以在那裏驗證。 我不認爲從JS嘗試從JS有效的RegExp將失敗。兩者都使用相同風格的正則表達式的 – AlvaroGMJ

+0

啊,這很有趣。我認爲ECMA和PCRE是不同的風格?我需要這個在提交給服務器之前檢查提供的正則表達式是否有效。這是客戶端驗證。 – Paul

+1

是的,正如你可以在http://www.regular-expressions.info/javascript.html中看到的,JS實現了一個Perl風格的正則表達式的子集*,而PCRE則主要是整個事物。 PHP用於在ereg *函數中使用「POSIX」正則表達式。但是,由於這些已被棄用,並且無論如何您都應該使用PCRE功能,所以您不應該發現任何問題。 – AlvaroGMJ

回答

2

快速&骯髒的AJAX代碼來檢查對PHP:

的Javascript:

function regexValidator(value) { 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() { 
     if (req.status == 200 && req.responseText.length() > 0) { 
      alert(req.responseText); 
     } 
    }; 
    req.open('GET', 'http://example.com/validator.php?r=' + escape(value), true); 
    req.send(); 
} 

PHP:

<?php 
if (isset($_GET['r'])) { 
    if (preg_match(urldecode($_GET['r']), '') === FALSE) { 
     echo "NOT VALID"; 
    } else { 
     echo "VALID"; 
    } 
} 
+0

我最終得到了同步調用,因爲我需要等待響應的方法,但是這個想法與發佈的相似。 – Paul

+1

@保羅你永遠不需要*同步呼叫。如果看起來像你,你的代碼需要重構。 –

2

有趣的問題。正則表達式baddass Steven Levithan編寫了一個漂亮的regex highlighter/colorizer,它解析了Javascript正則表達式並在該過程中執行了部分(如果不完整)驗證。它突出顯示它找到的任何語法錯誤。但關於PCRE正則表達式的味道...

我有一個Javascript(GitHub)項目,可能會有所幫助。它被稱爲:Dynamic Regex Highlighter。它將驗證PCRE語法與組和字符類的括號匹配有關。但是,它不檢查任何其他語法要求。如果你正在使用正則表達式,無論如何它可能值得一看。我發現測試儀頁面在檢查以非自由空間模式編寫的長而複雜的正則表達式(很差)時非常有用。將鼠標懸停在括號上時,高亮顯示匹配括號,如果它是捕獲組,則會在彈出式工具提示中提供組號。

參見:Dynamic Regex Highlighter Tester