如何将 JavaScript 正则表达式转换为 php 正则表达式


How can convert a javascript regexp to php regexp?

做这个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))*$

这个正则表达式适用于验证电子邮件,并且是javascript中此函数的结果(sValidEmail):

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;
}

谢谢!

为什么要使用转义序列来验证电子邮件地址???

这里有一个你可以改用的,是的,它可以在JavaScript和PHP中使用:

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