-1

0000またはスペースのみを許可し、両方を許可しない正規表現を取得するにはどうすればよいですか?

例:

  1. 0000000000000000000-> OK;
  2. スペースのみ->OK;
  3. 0000000000000->問題あり;
  4. afads0000000fd->OKではありません。
4

3 に答える 3

6
^(?:0+| +)$

説明:

^      # Start of string
(?:    # Either match (but don't capture)...
 0+    # one or more zeroes
|      # or
 [ ]+  # one or more spaces
)      # End of non-capturing group (used to contain the alternation)
$      # End of string
于 2012-04-19T15:55:12.967 に答える
1

編集:この回答は、先頭および/または末尾のスペースを許可する場合にのみ適用されます。失敗の原因となるスペースの問題で与えられた唯一の例は、スペースが0シーケンスを区切る場所です。

そうでない場合は、 @Tim Pietzcker's answer のように、正規表現が必要になります。


スペースのみの文字列は に変換され、先頭/末尾のスペースは無視されるため、正規表現の代わりにtoNumber変換を行うことができます。0

ここでは、単項演算子を使用+してtoNumber変換を行います。

if (+str === 0) {
   // pass
}

1 つの注意点は、空の文字列も に変換されること0です。それが望ましくない場合は、最初に.length.

if (str.length && +str === 0) {
   // pass
}

"0000000000000000000"  // pass
"   000   "            // pass
"       "              // pass
"000000000 0000"       // fail
"afads0000 00 0fd"     // fail

""  // pass first solution, fail second solution
于 2012-04-19T15:56:58.010 に答える
0

これはうまくいくはずです:(0+)|( +)ですね。

于 2012-04-19T15:56:28.090 に答える