用于查找空格或大写字符的Java正则表达式

用于查找空格或大写字符的Java正则表达式,java,regex,whitespace,casing,Java,Regex,Whitespace,Casing,我有一个验证字符串并确保其不包含任何空格或大写字符的方法: boolean validate(String input) { if(input.matches(".*\\S.*([A-Z]+)")) { return false; } return true; } 不幸的是,当我运行这个时,它根本不起作用。它不抛出任何异常,只允许所有输入字符串(“HelloWorld”、“hello world”、“hello world”等)通过验证。你知道我哪里出

我有一个验证字符串并确保其不包含任何空格或大写字符的方法:

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

    return true;
}
不幸的是,当我运行这个时,它根本不起作用。它不抛出任何异常,只允许所有输入字符串(“HelloWorld”、“hello world”、“hello world”等)通过验证。你知道我哪里出错了吗?

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

如果字符串不包含任何大写字符或空格字符,则返回true

解释

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

  • ^
    使其为负数,因此它匹配所有未提供的内容
  • A-Z
    是大写字符的范围
  • \\s
    是任何空白字符的缩写
  • +
    确保您的字符串至少为1个或更多字符
您可以使用
.matches([^A-Z\\s]+”)

如果字符串不包含任何大写字符或空格字符,则返回true

解释

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

  • ^
    使其为负数,因此它匹配所有未提供的内容
  • A-Z
    是大写字符的范围
  • \\s
    是任何空白字符的缩写
  • +
    确保您的字符串至少为1个或更多字符
将代码更改为

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

    return true;
}
因为
匹配
函数尝试匹配整个字符串,所以不需要使用锚。如果输入字符串包含空格或大写字母,上述代码将返回false。

将代码更改为

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

    return true;
}

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

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

.*[A-Z\s].*
如果任何一个这样的字符将使输入无效,那么这将很好地工作


通常,我会在开始和结束时删除
*
,但是Java的
字符串匹配()
必须匹配整个字符串,否则它会失败,这与动态语言中流行的
=~
操作符不同,后者将匹配任何子字符串。

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

.*[A-Z\s].*
如果任何一个这样的字符将使输入无效,那么这将很好地工作


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

如果字符串至少有一个非空白字符,然后至少有一个大写字母,则正则表达式将匹配。它不会执行您想要的匹配。您最好使用“负正则表达式”和
.find()
;例如,
final Pattern wsOrUpper=Pattern.compile(“[A-Z\\s]”)
,然后尝试并
wsOrUpper.matcher(input.find())
如果字符串至少有一个非空白字符,然后至少有一个大写字母,则正则表达式将匹配。它不会执行您想要的匹配。您最好使用“负正则表达式”和
.find()
;例如,
final Pattern wsOrUpper=Pattern.compile(“[A-Z\\s]”)
,然后尝试并
wsOrUpper.matcher(input.find())
为什么要在开头使用插入符号?还是太复杂了。
^
使其成为一个负数字符类,因此它表示[]中没有任何字符,即没有大写字母,也没有空格。是的,当然-我真傻。虽然我仍然认为我的答案更简单,但那也行。@Guss如果你能在一个字符类中组合所有选项,为什么要使用
|
?为什么要在开头加上插入符号?还是太复杂了。
^
使其成为一个负数字符类,因此它表示[]中没有任何字符,即没有大写字母,也没有空格。是的,当然-我真傻。虽然我仍然认为我的答案更简单,但这会起作用。@Guss如果你能在一个字符类中组合所有选项,为什么要使用
|
?没有必要这样做。这将减少一些调试步骤。不需要这样做。这将减少一些调试步骤。