我用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})$");
這種模式工作正常接受一個電子郵件扔文本框。但是,現在我需要一種模式來驗證用逗號分隔的多個電子郵件。
任何人都可以告訴我的模式?
我用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})$");
這種模式工作正常接受一個電子郵件扔文本框。但是,現在我需要一種模式來驗證用逗號分隔的多個電子郵件。
任何人都可以告訴我的模式?
類似以下內容:
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*")
字符串,然後迭代這個數組和使用模式驗證每個電子郵件地址。
根據您的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" />
請注意,該模式爲「無效字符」更寬鬆,因爲非拉丁字符,如西里爾文,希伯來文,梵文,中國等在電子郵件地址是有效!如果您希望始終將其更改爲不同的模式,並根據業務需求匹配單個郵件地址,則可以這樣做。
或以逗號分隔並單獨驗證每一個。這也使您可以更輕鬆地報告哪些電子郵件驗證失敗。無論如何,你會使用正則表達式,然後使用一組「(,[相同的正則表達式])+」。 –
如果這對你很重要,首先分割逗號將比單個正則表達式有效得多。 – DJClayworth
您的正則表達式似乎很容易在網上找到。儘管可能是更好的電子郵件之一,但它仍然過於嚴格,沒有完全有效的電子郵件通過。閱讀[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