1

我有一个方法可以验证字符串并确保它没有任何空格或大写字符:

boolean validate(String input) {
    if(input.matches(".*\\S.*([A-Z]+)")) {
        return false;
    }

    return true;
}

不幸的是,当我运行它时,它根本不起作用。它不会抛出任何异常,它只允许所有输入字符串(“HelloWorld”、“hello world”、“Hello world”等)通过验证。有什么想法我哪里出错了吗?

4

3 回答 3

4

您可以使用.matches("[^A-Z\\s]+")

如果您的字符串不包含任何大写字符或空白字符,它将返回 true。

解释

之间的位[...]称为字符类,它匹配提供的所有字符

  • ^使其为负数,因此它匹配未提供的所有内容
  • A-Z是大写字符的范围
  • \\s是任何空白字符的简写
  • +确保您的字符串至少为 1 个字符或更多。
于 2014-10-17T15:37:29.577 回答
0

将您的代码更改为,

boolean validate(String input) {
    if(input.matches(".*?[A-Z\\s].*")) {
        return false;
    }

    return true;
}

因为matches函数试图匹配整个字符串,所以你不需要去寻找锚点。如果输入字符串包含空格或大写字母,上述代码将返回 false。

于 2014-10-17T15:40:29.950 回答
0

最简单的匹配空格或大写字母的正则表达式是:

.*[A-Z\s].*

如果任何单个这样的字符将使输入无效,那么这将很好地工作。

通常,我会.*在开头和结尾删除 ,但 JavaString#matches()必须匹配整个字符串,否则它会失败,这与=~动态语言中流行的运算符不同,它将匹配任何子字符串。

于 2014-10-17T15:43:16.013 回答