java - 正则表达式安卓

标签 java android regex

我正在尝试检查 at 字符是否仅存在于 android 编辑 View 中。我是正则表达式的新手,我实现了即将发布的代码。我哪里弄错了?这是我的代码

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){}

最佳答案

您当前的代码有两个问题:

  • 前导斜线意味着它确实在寻找“/@”而不仅仅是“@”。您似乎认为“/”在正则表达式中做了一些特殊的事情——事实并非如此。
  • 您正在使用 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 风格设计的。)我不会为此使用一个 just - 只在你需要的地方使用正则表达式'对模式匹配非常感兴趣。

如果你想为“至少一个非@,后跟@,再后跟至少一个非@”使用正则表达式,你可以使用:

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

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

顺便说一句,这个:

catch(Exception ex){}

绝不是个好主意。请不要随意忽略错误。

关于java - 正则表达式安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10310241/

相关文章:

java - Arrays.asList(array) 和 new ArrayList<Integer>(Arrays.asList(array)) 的区别

java - Java 递归算法是否会消耗更多堆导致额外的垃圾收集?

java - 如何从 android (CallLog.Calls.CONTENT_URI) 表中获取联系人姓名?

python - 如何编写此正则表达式来匹配整个字符串?

javascript - 密码的正则表达式,规则很少

java - 如何在Debian服务器上持续自动运行.jar?

java - 为什么读取文件时多行没有保存在数据库中?

android - Android Studio 未检测到平板电脑

android - 如何从右到左输入小数值(金钱)?

asp.net - C# 拆分正则表达式 : Capture a group when follow by characters