Java - регулярное выражение - PullRequest
0 голосов
/ 11 мая 2011

У меня есть регулярное выражение для проверки электронной почты:

Validemail = ^[^\\^~`'!@$#=%&*()+|{}:;,><?\"\\/\\[\\]\\\\\\s-\\.]([^\\^~`'!@$#=%&*()+|{}:;,><?\"\\/\\[\\]\\\\\\s\\.]|\\.(?!\\.+?))*[^\\^~`'!@$#=%&*()+|{}:;,><?\"\\/\\[\\]\\\\\\s-\\.]@[^\\^~`'!@$#=%&*()+|{}:;,><?\"\\/\\[\\]\\\\\\s\\.]*[^\\^~`'!@$#=%&*()+|{}:;,><?\"\\/\\[\\]\\\\\\s-\\.]\\.(?!\\.+?)[^\\^~`'!@$#=%&*()+|{}:;,><?\"\\/\\[\\]\\\\0-9\\s-\\_]{2,40}$$

Эта проверка допускает EG: kate@stack---overlow.com

Однако я хочу ограничить доменное имя после @ и до. так что есть только 1 дефис.

Обновление:

Я бы не предпочел сделать эту проверку с использованием contains, а сделать ее частью регулярного выражения.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Я бы рекомендовал сначала проверить адрес электронной почты с помощью API JavaMail, как описано в этом ответе: проверить поле электронной почты с помощью регулярного выражения .Таким образом, вам не нужно иметь дело со сложным регулярным выражением для обработки всех деталей спецификации RFC 822 по адресам электронной почты.

Как только оно пройдет, добавьте дополнительную проверку для одного дефиса после @ и до ., например:

public boolean isValidEmail(String email) {
    try {
        String address = new InternetAddress(email).getAddress();
        return address.matches(".*@[^-]*-{0,1}[^-]*\\..*");
    } catch (AddressException e) {
        // you should probably log here for debugging
        return false;
    }
}
0 голосов
/ 11 мая 2011

попробуйте, это регулярное выражение будет принимать только 1 -

((\w|-)+(\.\w+)?)+@[\w]+\-{0,1}[\w]+\.\w+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...