正则表达式Android

时间:2012-04-25 06:11:34

标签: java android regex

我试图检查一个at字符只存在于android编辑视图中。我是正则表达式的新手,我实现了即将推出的代码。我错在哪里?这是我的代码

try {

        Pattern pattern = Pattern.compile("/@");
        Matcher matcher = pattern.matcher(valEmail);

        if (!matcher.matches()) {

            Toast.makeText(this," Invid no @ character ",Toast.LENGTH_LONG).show();

        }

    }catch(Exception ex){}

5 个答案:

答案 0 :(得分:6)

您当前的代码存在两个问题:

  • 领先的斜杠意味着它真的在寻找" / @"而不只是" @"。你似乎认为" /"在正则表达式中做一些特别的事情 - 它没有。
  • 您正在使用matches()尝试匹配输入的整个;你想要find,它只是试图在输入中找到正则表达式某处的匹配。

为什么你要使用正则表达式呢?为什么不呢:

if (!valEmail.contains("@")) {
    ...
}

这将检查地址是否包含任何" @"迹象。如果你想检查那里只有一个" @"签收,您可以使用:

int atIndex = valEmail.indexOf('@');
if (atIndex == -1) {
    // Handling for *no* @ sign
}
if (valEmail.indexOf('@', atIndex + 1) != -1) {
    // Handling for multiple @ signs
}

如果你想要使用正则表达式,那么可以使用更复杂的电子邮件地址验证正则表达式。 (有许多不同的有效性级别 - 确保你得到一个针对正则表达式的Java风格的设计。)虽然我不会使用一个 - 只使用正则表达式您对模式匹配真正感兴趣的地方。

如果你想使用正则表达式来表示"至少有一个非@,跟随@,后跟至少一个非@"你可以使用:

// TODO: Compile this once and reuse
Pattern pattern = Pattern.compile("[^@]+@[^@]+");
Matcher matcher = pattern.matcher(valEmail);

if (!matcher.matches()) {
    ...
}

顺便说一下,这个:

catch(Exception ex){}

永远不会一个好主意。请不要随意忽略错误。

答案 1 :(得分:2)

对于电子邮件,您可以使用正则表达式以下。

 private static final String EMAIL_PATTERN = "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$";



    try {

    Pattern pattern = Pattern.compile(EMAIL_PATTERN);
    Matcher matcher = pattern.matcher(valEmail);

    if (!matcher.matches()) {

        Toast.makeText(this," Invid no @ character ",Toast.LENGTH_LONG).show();

    }

}catch(Exception ex){
}

答案 2 :(得分:1)

正则表达式中有一个前导/,不应该存在。

此外,您应该使用find,而不是matches

答案 3 :(得分:1)

matches()方法检查整个字符串是否与正则表达式匹配。您应该使用find()方法而不是匹配。/字符不应该在那里 但不是所有这些,你最好使用contains()字符串方法。 if(valEmail.contains("@"))

答案 4 :(得分:0)

在开头使用@而不使用/