我正在使用java regex包来验证电子邮件,如下所示:
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})$");
此模式适用于接受一个电子邮件投掷文本框。但是,现在我需要一个模式来验证用逗号分隔的多个电子邮件。
任何人都可以告诉我这种模式吗?
答案 0 :(得分: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*")
拆分字符串,然后遍历数组并使用您的模式验证每个电子邮件地址。
答案 1 :(得分:0)
根据您的question history,您似乎需要JSF <h:inputText>
component。我强烈建议寻找一种不同且更强大的方法。
在JSF中,绝对不应该在托管bean操作方法内部进行验证,而是在完全Validator
实现中进行验证。在那里你可以单独检查每个邮件地址。
@FacesValidator("mailAddressesValidator")
public class MailAddressesValidator implements Validator {
private static final Pattern PATTERN = Pattern.compile("([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)");
@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" />
请注意,对于“无效字符”,该模式更宽松,因为电子邮件地址中的非拉丁字符,例如西里尔字母,希伯来文,梵文,中文等,有效!您可以根据业务需求将其更改为与单个邮件地址匹配的其他模式。