2011-12-13 11 views
0

我用java正則表達式包如下驗證電子郵件:需要的模式接受多個電子郵件

Pattern p = Pattern.compile("^[ _A-Za-z0-9-]+(\\.[ _A-Za-z0-9-]+)*@" 
          + "[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,4})$"); 

這種模式工作正常接受一個電子郵件扔文本框。但是,現在我需要一種模式來驗證用逗號分隔的多個電子郵件。

任何人都可以告訴我的模式?

+10

或以逗號分隔並單獨驗證每一個。這也使您可以更輕鬆地報告哪些電子郵件驗證失敗。無論如何,你會使用正則表達式,然後使用一組「(,[相同的正則表達式])+」。 –

+1

如果這對你很重要,首先分割逗號將比單個正則表達式有效得多。 – DJClayworth

+0

您的正則表達式似乎很容易在網上找到。儘管可能是更好的電子郵件之一,但它仍然過於嚴格,沒有完全有效的電子郵件通過。閱讀[this](http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx)或看[this ](http://www.regexplanet.com/simple/index.html)網站並使用您的模式驗證_!def!xyz%[email protected]_。是的,這顯然是一個完全有效的地址。 – Wivani

回答

1

類似以下內容:

String regex = "[ _A-Za-z0-9-]+(\\.[ _A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,4})"; 

Pattern p = Pattern.compile("^(?:" + regex + "\\s*,\\s* + ")*" + regex + "$"); 

,或者,先被分割使用split("\\s*,\\s*")字符串,然後迭代這個數組和使用模式驗證每個電子郵件地址。

0

根據您的question history您似乎需要此爲JSF <h:inputText> component。我強烈建議尋找一種不同的更穩健的方法。

在JSF中,驗證絕對不應該在託管bean操作方法內完成,而應該在完整的Validator實現中完成。在這裏你可以單獨檢查每個郵件地址。

@FacesValidator("mailAddressesValidator") 
public class MailAddressesValidator implements Validator { 

    private static final Pattern PATTERN = Pattern.compile("([^[email protected]]+)(\\.[^[email protected]]+)*@([^[email protected]]+\\.)+([^[email protected]]+)"); 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) { 
     if (value == null) { 
      return; 
     } 

     String[] mailAddresses = (String[]) value; 
     List<FacesMessage> messages = new ArrayList<FacesMessage>();   

     for (String mailAddress : mailAddresses) { 
      if (!PATTERN.matcher(mailAddress).matches()) { 
       messages.add(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid mail address format: " + mailAddress, null)); 
      } 
     } 

     if (!messages.isEmpty()) { 
      throw new ValidatorException(messages); 
     } 
    } 
} 

如下使用它:

<h:inputText value="#{bean.mailAddresses}" validator="mailAddressesValidator" /> 

請注意,該模式爲「無效字符」更寬鬆,因爲非拉丁字符,如西里爾文,希伯來文,梵文,中國等在電子郵件地址是有效!如果您希望始終將其更改爲不同的模式,並根據業務需求匹配單個郵件地址,則可以這樣做。

相關問題