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


Convert Java Regex into PHP regex

我从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的要求的条件,以便它回显'它通过了'。谢谢你!

2日更新:

下面是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. PHP regex不需要像Java regex那样需要双''
  2. PCRE regex有[[:ascii:]]代替''p{ASCII}
  3. PCRE正则表达式需要分隔符,不像Java正则表达式

下面的PHP正则表达式应该为你工作:

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