2011-05-22 151 views
-4

做此Javascript正則表達式是用PHP兼容:如何將javascript正則表達式轉換爲php正則表達式?

^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$ 

這個正則表達式可以很好地用於驗證電子郵件,並且是結果這個功能(sValidEmail)在javascript:

function validateMail(sEmail) 
{ 
    // RFC822 
    var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'; 
    var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'; 
    var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'; 
    var sQuotedPair = '\\x5c[\\x00-\\x7f]'; 
    var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d'; 
    var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22'; 
    var sDomain_ref = sAtom; 
    var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')'; 
    var sWord = '(' + sAtom + '|' + sQuotedString + ')'; 
    var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*'; 
    var sLocalPart = sWord + '(\\x2e' + sWord + ')*'; 
    var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec 
    var sValidEmail = '^' + sAddrSpec + '$'; // as whole string 
    alert(sValidEmail); 
    var reValidEmail = new RegExp(sValidEmail); 

    if (reValidEmail.test(sEmail)) { 
     return true; 
    } 

    return false; 
} 

謝謝!

+0

你嘗試了嗎? – Toto 2011-05-22 17:10:37

+0

用正則表達式分隔符和單引號將其與preg_match結合使用。但也可以考慮只使用FILTER_VALIDATE_EMAIL。 – mario 2011-05-22 17:30:39

+0

驗證電子郵件沒有好的正則表達式,RFC太複雜了。請參閱[驗證電子郵件地址的最佳正則表達式是什麼?](http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses) – 2011-05-22 18:28:51

回答

3

爲什麼在世界上你會使用轉義序列來驗證電子郵件地址???

這裏有一個,你可以使用,而不是,是的它可以在JavaScript和PHP中使用:

[a-zA-Z0-9_\+\-]+(\.[a-zA-Z0-9_\+\-]+)*@[a-zA-Z0-9_\+\-]+(\.[a-zA-Z0-9_\+\-]+)*\.[a-zA-Z]{2,} 
+0

這樣做不工作 - 它與'+'不匹配地址,如'test + hello @ gmail.com'。 – 2011-05-22 18:26:54

+0

@AndréParamés:對不起,修正了(但是如果你問我,那種電子郵件地址的人都會被拒絕 - 即使是Facebook也會這麼做:-)) – Ryan 2011-05-22 18:32:18

+0

「+後綴」表示法主要用於過濾取決於來源的電子郵件;我可能會使用'myemail + stackoverflow @ provider.com',然後我可以過濾來自SO的所有電子郵件。瞭解垃圾郵件來自哪裏也很有用,因爲您確切知道哪些網站給垃圾郵件發送者提供了您的地址。 – 2011-05-22 18:46:45

相關問題