将Java Regex转换为PHP正则表达式

时间:2014-07-10 14:26:22

标签: java php regex email

我从Apache commons获得了以下Java代码来验证电子邮件地址。我用PHP编写代码,所以我试图看看这些正则表达式是否可以直接在PHP中使用而无需任何修改。

LEGAL_ASCII_REGEX = "^\\p{ASCII}+$";
EMAIL_REGEX = "^\\s*?(.+)@(.+?)\\s*$";
IP_DOMAIN_REGEX = "^\\[(.*)\\]$";
USER_REGEX = "^\\s*" + WORD + "(\\." + WORD + ")*$";

如果电子邮件地址未能满足上述4个条件中的任何一个条件,那么它将被视为无效。

我没有任何Java经验,所以对PHP所需的这些正则表达式的修改建议非常感谢!

最佳,

更新

我正在使用的代码是:

        $email_to_test='www.jinfu66@foxmail.com';

        if(filter_var($email_to_test, FILTER_VALIDATE_EMAIL)&&preg_match('/^[[:ascii:]]+$/', $email_to_test)&&preg_match('/^\s*?(.+)@(.+?)\s*$/', $email_to_test))
        {
            echo 'It passed';
        }

        else
        {
            echo 'It did not t passs';
        }

我不确定如何添加$ email_to_test必须符合来自$ USER_REGEX的要求的条件,以便它回显'It pass'。谢谢!

第二次更新:

这是WORD在原版JAVA正则表达式中所代表的含义:

private static final String SPECIAL_CHARS = "\\p{Cntrl}\\(\\)<>@,;:'\\\\\\\"\\.\\[\\]";
private static final String VALID_CHARS = "[^\\s" + SPECIAL_CHARS + "]";
private static final String QUOTED_USER = "(\"[^\"]*\")";
private static final String WORD = "((" + VALID_CHARS + "|')+|" + QUOTED_USER + ")";

1 个答案:

答案 0 :(得分:2)

  1. PHP正则表达式不需要像Java regex那样的双\\
  2. PCRE正则表达式有[[:ascii:]]而不是\\p{ASCII}
  3. 与Java正则表达式不同,PCRE正则表达式需要分隔符
  4. 以下PHP正则表达式适合您:

    $LEGAL_ASCII_REGEX = '/^[[:ascii:]]+$/';
    $EMAIL_REGEX = '/^\s*?(.+)@(.+?)\s*$/';
    $IP_DOMAIN_REGEX = '/^\[(.*)\]$/';
    $USER_REGEX = '/^\s*' + preg_quote(WORD, '/') + '(\.' + preg_quote(WORD, '/') + ')*$/';