新しいプログラミング言語や構文を始めた人はよくあることですが、かなり! ^
と$
のアンカーが正しく使用されており、文字クラス[a-zA-Z]
は文字(音は私にとっては正しい)と一致しますが、あなたの繰り返しはちょっとおかしかったです。あなたのグループはあなたの主な問題です。
^[[a-zA-Z]+\s{1}]{0,}[a-zA-Z]+$
^ ^^^^^^^^
a bbbacccc
効果的にグループの繰り返しがないため、2つの単語にのみ一致します。これはあなたが本当にグループを持たないからです - 文字クラスだけです。最も簡単な修正はカッコする(上記のリストにa
年代でマーク)最初[
とその対応するendブレースを変更することです:
^([a-zA-Z]+\s{1}){0,}[a-zA-Z]+$
この単一の変更は、それはあなたが期待するように動作させるでしょう!しかし、私がしたいと思ういくつかの勧告と考慮事項があります。
最初に、可読性とコードのメンテナンスのために、可能な限り繰り返し中括弧の代わりに1文字の繰り返し演算子を使用してください。 *
はゼロ回以上繰り返され、+
は1回以上繰り返され、?
は0回または1回繰り返される(AKA オプション、)。あなたの反復中括弧は構文的に正しいものであり、あなたが意図するものですが、(b
のもの)は冗長で、もう一つは上記アスタリスク*
、彼らはまったく同じ意味を持っているように:
^([a-zA-Z]+\s)*[a-zA-z]+$
第二に、私は次の点を考慮して、(アプリケーションの要件に応じて)を考慮代わりに[a-zA-Z]
文字クラスの\w
速記文字クラスをお勧めします:
を
- it ma
- 数字と0-9とアンダースコアも一致します
- 多言語入力のために非英語(ユニコード)文字と一致するように構成されることがよくあります。
これらのいずれかが不必要な場合や望ましくない場合は、適切なトラックを使用してください。
文字の組み合わせ\b
は、文字境界のアサーションであり、あなたの場合は必要ありません。既に始まり、終わるところには文字と文字のみがあります。
正規表現の詳細については、Regular-Expressions.infoをお勧めします。この正規表現については、正規表現とさまざまな実装の内部的なやり方について豊富な情報があります。また、RegexBuddyというツールを使って式をテストしデバッグします。
は、この古典的なASPですか?またはASP.Net? (ご質問とタグを改訂してください) –
修正していただきありがとうございます。 – Antenka