2011-05-22 129 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

相关问题