1

私がやろうとしていること:この正規表現は、最初の文字を強制的に文字にする必要があり、その文字の後に、文字、空白、または「-」を挿入できます。

この最初の部分は問題なく機能します。(^[A-Za-z][A-Za-z -]*$)

次に、空の文字列も許可したいと思います:(^$)

ただし、2 つを組み合わせると、ユーザーは文字列を空白で始めることができます。ここで何が間違っていますか?ありがとう!

(^[A-Za-z][A-Za-z -]*$)||(^$)

(この情報が必要かどうかはわかりませんが、これを Java で、InputVerifier から拡張されたクラスの一部として使用して、JTextField にベリファイアを設定します)

4

2 に答える 2

4

これはあなたのニーズに合うはずです:

^([A-Za-z][A-Za-z -]*|)$

OR正規表現のは 1 つしか必要としません|が、古典的な Java の 1 つ (他の言語の中でも) は 2 つ必要||です。

于 2012-12-18T09:40:36.590 に答える
3

次のようにする必要があります。

^([A-Za-z][A-Za-z -]*)?$

?、括弧内の式をオプションにします。

元の正規表現が正しくない理由は、||. 正規表現の「or」演算子は単一の|. を考えてみましょうx||y。これは、x または空の文字列または y. 空の文字列は固定されていないため、任意の入力Pattern.find()で少なくとも 1 つのインスタンスが見つかります。

于 2012-12-18T09:42:30.647 に答える