Что было бы регулярным выражением для действительного адреса электронной почты (несколько раз .com или .in) в Android

android

194 просмотра

3 ответа

2951 Репутация автора

Я знаю, что этот вопрос задавался много раз, но мой вопрос отличается от других. В настоящее время я использую приведенное ниже регулярное выражение для проверки адреса электронной почты, но есть случай, когда я проверяю .com.com несколько раз, что он принимает. Я хочу регулярное выражение, которое также проверяет несколько .com или несколько .in. это возможно? Или я должен обработать это программно, как я разделить всю строку с выражением «.» И проверить длину массива. Если длина больше 1, это означает, что кратно. com / .in существует и не должен проверять? Я использую регулярное выражение ниже

 String regExpn =
    "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$";
Автор: Abdul Waheed Источник Размещён: 18.07.2016 11:39

Ответы (3)


0 плюса

1202 Репутация автора

public static final Pattern EMAIL_PATTERN = Pattern
        .compile("^(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\""
                + "(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\"
                + "[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[a-z0-9])?\\.)"
                + "+[A-Za-z0-9](?:[A-Za-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.)"
                + "{3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:"
                + "(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\"
                + "[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$");

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

Автор: finki Размещён: 18.07.2016 11:41

0 плюса

6779 Репутация автора

Просто предлагаю

if(email.substring(email.lastIndexOf("@") + 1).chars().filter(ch -> ch == '.').count() >=2 ){
  //contains .in
}
Автор: Shree Krishna Размещён: 18.07.2016 11:49

0 плюса

2951 Репутация автора

Вот как я решил мою проблему, как указано в вопросе выше.

Сначала я использовал функцию String split () с выражением «@» и получил String по первому индексу, а затем разделил его выражением «\». и получил длину строки массива, если длина больше 2, это означает, что .com / .in содержит несколько раз ниже код:

  public static boolean isEmailValid(String email) {

    CharSequence inputStr = email;
    Pattern pattern = Pattern.compile(regExpn,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);

    if(matcher.matches()) {
        String [] splitedEmail = email.split("@");
        String toCheckMultipleDots = splitedEmail[1];
        String [] toChecksplittedDots = toCheckMultipleDots.split("\\.");

        if(toChecksplittedDots.length > 2){
            return false;
        } else {
            return true;
        }
    }

    else
        return false;
}
Автор: Abdul Waheed Размещён: 19.07.2016 07:20
Вопросы из категории :
32x32