2014-07-10 191 views
-2

我从Apache共享中获得以下Java代码来验证电子邮件地址。我使用PHP编写代码,所以我试图查看这些正则表达式是否可以在没有任何修改的情况下直接在PHP中使用。将Java正则表达式转换为PHP正则表达式

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

如果一个电子邮件地址在上述4个条件中的任何一个都失败了,那么它将被认为是无效的。

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

最佳,

更新:

我正在使用的代码是:

 $email_to_test='[email protected]'; 

     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
  1. PHP正则表达式不需要双\\像Java正则表达式
  2. PCRE正则表达式有[[: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, '/') + ')*$/'; 
+1

咦,你转换4个正规表达式,并没有爱......? +1 :) – zx81

+0

谢谢@ zx81 ....我想因为问题得到了太多的反对票,所以它失去了知名度。 – anubhava

+0

我爱你@anubhava – user3820799

相关问题