文字列内のスペースを許可し、空白のみを許可しないフォーム検証のための正規表現を記述する必要があります。
たとえば、_'Chicago Heights, IL'
_は有効ですが、ユーザーがスペースバーを何回か押してEnterキーを押すと、フォームは検証されません。検証の前に、if (foo != null)
を実行してから正規表現を実行しようとしましたが、スペースバーを押すと文字が登録されるため、機能しませんでした。これが私が今使っているもので、スペースを許可しています:
_^[-a-zA-Z0-9_:,.' ']{1,100}$
_
とても簡単です:.*\S.*
これには、任意の場所にスペース以外の文字が1つ必要です。正規表現の構文は、Perl 5互換の正規表現用です。別の言語を使用している場合、構文は少し異なる場合があります。
ここにRegEx
が必要かわかりません。言語の Trim()
メソッドを呼び出して、結果の文字列が空でないことを確認しないのはなぜですか?
以下は書かれたとおりにあなたの質問に答えますが、後で私の追加のメモを参照してください:
^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$
説明:(?!\s*$)
は negative lookahead です。つまり、「次の文字はサブパターン\s*$
と一致できません。」サブパターンを考慮に入れると、それは次のことを意味します。「次の文字は、空の文字列でも、最後まで空白の文字列でもありません。したがって、この時点の後に、空白以外の文字が少なくとも1つ必要です。文字列。」いったんそのルールをクリアしたら、キャラクタークラスにスペースを自由に入れることができます。
補足:' '
が意図したとおりに動作していないと思います。スペース文字を表現しようとしたようですが、正規表現は'
をリテラルのアポストロフィとして解釈します。文字クラス内では、' '
は「'
、スペース文字、または'
のいずれかの文字に一致する」ことを意味します(2番目の'
文字は冗長であることに注意してください)。 。私はあなたが望むものはこのようなものだと思います:
^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
あなたはシンプルなものを使うことができます:
^(?=.*\S).+$
あなたの正規表現エンジンが肯定的な先読みをサポートしている場合。この式には、スペース以外の文字が少なくとも1つ必要です。
rubular で参照してください。
許可された文字セットのみで検証を適用したい場合は、USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;
を試してみました
., _ , -
文字も使用できますが、文字列には1文字の英数字を含める必要があります。