仅从域列表中进行电子邮件验证

时间:2015-10-28 19:04:44

标签: java android validation email

我想验证通过edittext输入的电子邮件地址。我已经看过使用Pattern的一般电子邮件验证,但我有一个带有效电子邮件域的Arraylist。我想仅从此域列表中验证电子邮件地址。

我已经尝试了很多,但无法使其发挥作用。请帮助:)

当前代码:

public boolean isEmailValid(String email) {
    String regExpn = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
            + "\\.(abc.com|abc.co|abc.nz|abc.org)$";

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

    return matcher.matches();
}

谢谢

一般电子邮件验证的原始正则表达式:

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})$";

1 个答案:

答案 0 :(得分:1)

尝试

(abc\\.com|abc\\.co|abc\\.nz|abc\\.org)

而不是

\\.(abc.com|abc.co|abc.nz|abc.org)

\。字面意思是一个点而不是每个字符"。 \\。需要Java来逃避反斜杠以获得\。作为正则表达式。

编辑:删除\\。在前面并且逃避域点就足够了,正则表达式和样本更新了:

    String regExpn = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
            + "(abc\\.com|abc\\.co|abc\\.nz|abc\\.org)$";

所以

        System.out.println(isEmailValid("yasd@abcXcom"));
        System.out.println(isEmailValid("yasd@abc.com"));
        System.out.println(isEmailValid("yasd@abc.co"));
        System.out.println(isEmailValid("yasd@abc.org"));
        System.out.println(isEmailValid("yasd@x"));

带来

false
true
true
true
false