2

我的要求是

“字符串不应为空或空”

例如,字符串可以包含任意数量的字符或后跟任何特殊字符的字符串,但不能为空,例如,字符串可以包含“a,b,c”或“xyz123abc”或“12!@$#% &*()9" 或 "aa bb cc"

所以,这就是我尝试 使用正则表达式的空白或空格:-

 ^\s*$ 
^ is the beginning of string anchor
$ is the end of string anchor
\s is the whitespace character class
* is zero-or-more repetition of

我被困在如何否定正则表达式 ^\s*$ 以便它接受任何字符串,如 "a,b,c" 或 "xyz" 或 "12!@$#%&*()9"

任何帮助表示赞赏。

4

5 回答 5

3

不需要正则表达式。在 Groovy 中,您有以下isAllWhitespace方法:

groovy:000> "".allWhitespace       
===> true
groovy:000> "  \t\n ".allWhitespace
===> true
groovy:000> "something".allWhitespace
===> false

所以询问!yourString.allWhitespace应该告诉你你的字符串是否不是空的或空白的:)

于 2012-11-15T18:54:40.983 回答
1

对我来说有两种简单的表达方式(都不需要锚定):

s.trim() =~ /.+/

或者

s =~ /\S+/

第一个假设您知道 trim() 的工作原理,第二个假设 \S 的含义。当然

!s.allWhitespace

是完美的,如果你知道它存在的话

于 2012-11-16T00:01:17.883 回答
1

\S

\S匹配任何非空白字符

每个角色类都有自己定义的反类,所以\w你有\W\s\S\d\D等。

http://www.regular-expressions.info/charclass.html

您的正则表达式引擎可能不支持\S. 如果是这种情况,[^ \t\v]如果您支持 unicode(您应该这样做),那么您应该注意更多的空间类型。

如果您的正则表达式引擎和您都支持 unicode 并且您的正则表达式引擎\S不支持,那么您可能想要使用(如果您关心人们输入不同的 unicode 空间类型):

[^ \r\f\t\v\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u2028\u2029\u202F\u205F\u3000\uFEFF]

http://www.cs.tut.fi/~jkorpela/chars/spaces.html
http://en.wikipedia.org/wiki/Whitespace_character#Unicode

于 2012-11-15T18:17:55.407 回答
0

这是在 grails 域类中吗?

如果是这样,只需使用空白约束

于 2012-11-15T18:24:39.103 回答
0

以下正则表达式将确保字符串包含至少 1 个非空白字符。

^(?!\s*$).+

注意:我不熟悉 groovy。但我想有一个本机函数(trim,empty等)比正则表达式更自然地测试它。

于 2012-11-15T18:22:04.160 回答