spring验证java模式多个邮件

时间:2017-02-28 14:19:41

标签: java regex spring validation email

我有正则表达式的问题。不知何故,在线regextester不能使用该模式。

我想允许

mymail@whatever.com

mymail1@whatever.com;mymail2@whatever.com;mymail3@whatever.com

所以一个没有分号和多个分号之间,但不是最后

我有什么:

private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
        + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

public EmailValidator() {
    pattern = Pattern.compile(EMAIL_PATTERN);
}

public boolean valid(final String email) {

    matcher = pattern.matcher(email);
    return matcher.matches();

}

2 个答案:

答案 0 :(得分:1)

只需将锚点之间的模式作为单个电子邮件匹配子模式,并使用它来构建最终模式:

private static final String SINGLE_EMAIL_PATTERN = "[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@"
    + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})";
private static final String EMAIL_PATTERN = "^" + SINGLE_EMAIL_PATTERN + "(?:;" + SINGLE_EMAIL_PATTERN + ")*$";

您的模式看起来像the one here

  • ^ - 将断言字符串的开头
  • SINGLE_EMAIL_PATTERN - 将匹配1封电子邮件
  • (?:;<SINGLE_EMAIL_PATTERN>)* - 将匹配0个或更多序列:
    • ; - ;
    • <SINGLE_EMAIL_PATTERN> - 一封电子邮件
  • $ - 将断言字符串的结尾。

答案 1 :(得分:1)

看看这个适合你:

$aggregation = new DateHistogram('clicks_by_day', 'date', 'day');
$query->addAggregation($aggregation);