web-dev-qa-db-ja.com

文字列にスペースを含めることができるが、空白スペースのみを許可する正規表現

文字列内のスペースを許可し、空白のみを許可しないフォーム検証のための正規表現を記述する必要があります。

たとえば、_'Chicago Heights, IL'_は有効ですが、ユーザーがスペースバーを何回か押してEnterキーを押すと、フォームは検証されません。検証の前に、if (foo != null)を実行してから正規表現を実行しようとしましたが、スペースバーを押すと文字が登録されるため、機能しませんでした。これが私が今使っているもので、スペースを許可しています:

_^[-a-zA-Z0-9_:,.' ']{1,100}$
_
14
user699242

とても簡単です:.*\S.*

これには、任意の場所にスペース以外の文字が1つ必要です。正規表現の構文は、Perl 5互換の正規表現用です。別の言語を使用している場合、構文は少し異なる場合があります。

36
Roland Illig

ここにRegExが必要かわかりません。言語の Trim() メソッドを呼び出して、結果の文字列が空でないことを確認しないのはなぜですか?

16
dlev

以下は書かれたとおりにあなたの質問に答えますが、後で私の追加のメモを参照してください:

^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$

説明:(?!\s*$)negative lookahead です。つまり、「次の文字はサブパターン\s*$と一致できません。」サブパターンを考慮に入れると、それは次のことを意味します。「次の文字は、空の文字列でも、最後まで空白の文字列でもありません。したがって、この時点の後に、空白以外の文字が少なくとも1つ必要です。文字列。」いったんそのルールをクリアしたら、キャラクタークラスにスペースを自由に入れることができます。

補足:' 'が意図したとおりに動作していないと思います。スペース文字を表現しようとしたようですが、正規表現は'をリテラルのアポストロフィとして解釈します。文字クラス内では、' 'は「'、スペース文字、または'のいずれかの文字に一致する」ことを意味します(2番目の'文字は冗長であることに注意してください)。 。私はあなたが望むものはこのようなものだと思います:

^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
8
Justin Morgan

あなたはシンプルなものを使うことができます:

^(?=.*\S).+$

あなたの正規表現エンジンが肯定的な先読みをサポートしている場合。この式には、スペース以外の文字が少なくとも1つ必要です。

rubular で参照してください。

4
Alex

許可された文字セットのみで検証を適用したい場合は、USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;を試してみました

  • 文字列には、先頭または末尾、あるいはその間に任意の数のスペースを含めることができますが、少なくとも1つの英数字が含まれます。
  • オプション., _ , -文字も使用できますが、文字列には1文字の英数字を含める必要があります。
0
Sandeep Sharma