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

「a、b、c」、「xyz」、「12!@$#%&*()9」などの任意の文字列を受け入れるように、正規表現 ^\s*$ を否定する方法に行き詰まっています。

どんな助けでも大歓迎です。

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

私には、それを表現する2つの簡単な方法があります(どちらも固定する必要はありません):

s.trim() =~ /.+/

また

s =~ /\S+/

1 つ目は、trim() がどのように機能するかを知っていることを前提としており、2 つ目は \S の意味を前提としています。もちろん

!s.allWhitespace

あなたがそれが存在することを知っていれば、完璧です

于 2012-11-16T00:01:17.883 に答える
1

\S

\S空白以外の任意の文字に一致

各文字クラスには独自のアンチクラスが定義されているため、for \wyou have \Wfor \syou have \Sfor \dyou have\Dなどがあります。

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

正規表現エンジンが をサポートしていない可能性があり\Sます。これがユニコードをサポートしている場合に使用する[^ \t\v]場合 (サポートする必要があります)、注意すべきスペースの種類が他にもあります。

あなたの正規表現エンジンとあなたの両方がユニコードを\Sサポートしていて、あなたの正規表現エンジンでサポートされていない場合は、おそらく使用したいと思うでしょう(異なるユニコードスペースタイプを入力する人々を気にする場合):

[^ \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 に答える