您当前的代码有两个问题:
- 前导斜线表示它确实在寻找“/@”而不仅仅是“@”。您似乎认为“/”在正则表达式中做了一些特别的事情 - 它没有。
- 您正在使用
matches()
which 尝试匹配整个输入;您想要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){}
从来都不是一个好主意。请不要不加选择地忽略错误。