Нужен шаблон для приема нескольких писем - PullRequest
0 голосов
/ 13 декабря 2011

Я использую пакет регулярных выражений 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})$");

Этот шаблон отлично работает для приема одного текстового поля для броска электронной почты.Но теперь мне нужен шаблон, который будет проверять несколько писем, разделенных запятыми.

Может кто-нибудь сказать мне шаблон?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Примерно так:

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 голосов
/ 13 декабря 2011

На основании вашей истории вопросов вам, кажется, это нужно для JSF <h:inputText> компонента .Я настоятельно рекомендую искать другой и более надежный подход.

В JSF проверка абсолютно не должна выполняться внутри метода действия управляемого компонента, а внутри полноценной реализации 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" />

Обратите внимание, что шаблон более мягок по отношению к "недопустимым символам", потому что нелатинские символы, такие как кириллица, иврит, санскрит,Китайский и т. Д. В адресе электронной почты действителен !Вы можете, если хотите, всегда менять его на другой шаблон, который должен соответствовать индивидуальному почтовому адресу согласно бизнес-требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...