我试图检查一个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){}
答案 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)
在开头使用@
而不使用/
。