正则表达式: - 字符串可以包含任何字符但不应为空

时间:2012-11-15 18:16:25

标签: regex grails groovy regex-negation

我的要求是

  

“字符串不应为空或空”

例如,一个字符串可以包含任意数量的字符或字符串,后跟任何特殊字符,但不应该为空,例如,字符串可以包含“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 “

感谢任何帮助。

5 个答案:

答案 0 :(得分:3)

不需要正则表达式。在Groovy中,您使用isAllWhitespace方法:

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

因此要求!yourString.allWhitespace告诉您字符串是否为空或空白:)

答案 1 :(得分:1)

\S

\S匹配任何非空格字符

每个角色类都有自己定义的反类,所以\w \W \s \S \d \D \S [^ \t\v] \S {1}}等等。

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

您的正则表达式引擎可能不支持[^ \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]。如果是这种情况,如果您支持unicode(您应该使用),则使用{{1}},您应该注意更多的空间类型。

如果您的正则表达式引擎和您支持unicode并且您的正则表达式引擎不支持{{1}},那么您可能希望使用(如果您关心人们输入不同的unicode空间类型):

{{1}}

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

答案 2 :(得分:1)

对我来说,表达它的两种简单方法是(都不需要锚定):

s.trim() =~ /.+/

s =~ /\S+/

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

!s.allWhitespace
如果你知道它存在,

是完美的

答案 3 :(得分:0)

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

^(?!\s*$).+

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

答案 4 :(得分:0)

这是grails域类吗?

如果是,just use the blank constraint