2014-07-10 229 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

相關問題