Java RegEx для почтового домена - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь ограничить использование электронной почты в форме регистрации (приложение для Android) только доменом моего университета (например, ***********@aou.edu.sa или ***********@arabou.edu.sa).

Код, который я получил до сих пор, это:

public void validateEmail(EditText anEmail){

    //String regex declaration for student emails
    String emailPatS = "^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@" + "[aou.edu.sa]";

    //string regex declaration for tutor emails
    String emailPatT = "^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@" + "[arabou.edu.sa]";

    //Pattern declaration for student and tutor emails
    Pattern studentPat = Pattern.compile(emailPatS);
    Pattern tutorPat = Pattern.compile(emailPatT);

    //Matcher declaration for student and tutor emails
    Matcher studentMatch = studentPat.matcher(anEmail.getText().toString());
    Matcher tutorMatch = tutorPat.matcher(anEmail.getText().toString());

    //if else for email editText validation
    if(studentMatch.matches()){
        submitForm();
    } else {
        //if it doesn't match, first don't allow the user to click sign up button
        //then compare to see if it's a tutor's email
        signUp.setEnabled(false);
        if(tutorMatch.matches()){ //if it does match a tutor's email then allow the user to click sign up and submit the form
            signUp.setEnabled(true);
            submitForm();
        } else { //if it matches neither student nor tutor emails then disallow user to
            //click sign up and toast an error message
            signUp.setEnabled(false);
            anEmail.setError("Please enter your university email only.");
            if(regEmail.isInEditMode()){
                signUp.setEnabled(true);
            }
        }
    }
}

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

Есть идеи альтернативного и более простого способа?

1 Ответ

0 голосов
/ 19 мая 2018

Попробуйте следующее регулярное выражение и посмотрите демо Regex101 :

^([_A-Za-z0-9-+]+\.?[_A-Za-z0-9-+]+@(aou.edu.sa|arabou.edu.sa))$

Проблема была в перехвате домена электронной почты - части после @.Вы использовали [] скобки, которые определяют группу запрещенных / разрешенных символов (зависит от ^).Если у вас есть немного возможностей, вы можете просто определить их в скобках () и разделить их символом | (or).

(aou.edu.sa|arabou.edu.sa)

В регулярном выражении я представилвыше, он распознает письмо только с одной точкой . (насколько я понял из вашей попытки).Вы можете сделать простое изменение, чтобы разрешить большее количество точек.

Редактировать: Не забывайте в Java экранировать символ точки с двойной косой чертой \\, конечно.

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