5

これは Java の RegEx に関する質問です。私はどこでも見ましたが、必要なものに似たものを見つけることができませんでした. また、私は自分で何時間もかけて試しました。

私は、Java でコーディングされた学校の研究室の最後の部分にいます。Eclipse をコンパイラとして使用しています。Swing コンポーネントを使用してメンバーシップ アプリケーションを作成しました。

私のフィールドの 1 つは、ユーザーが 10 桁の電話番号を入力するためのものです。ただし、これを JFormatted テキスト フィールドにし、テキスト ボックスを "(###) ###-####" の形式でマスクする必要がありました。したがって、プログラムがロードされると、そのテキスト ボックスは次のようになります: "( _)- ___"

あとは、ユーザーが 10 桁で入力できるようにする正規表現を作成するだけです。ただし、上で使用したマスクされた形式で動作する必要があります。これは私がこれまでに持っているものです:

pattern = Pattern.compile("\\d{3}\\s\\d{3}-\\d{4}");
    matcher = pattern.matcher(phoneText.getText());
    if (!matcher.find())
    {
        phoneText.requestFocus();
        JOptionPane.showMessageDialog(null, "Phone entered incorrectly.  Phone should be:\n" +
                "10 numeric digits.",
                "A D D   E R R O R",JOptionPane.ERROR_MESSAGE);
        return;
    }

マスク形式でスペースとダッシュを受け入れる場所に正規表現が書き込まれていると思いますが、括弧を含める方法がわかりません。

編集: Andrew Thomas のヒントに従って、正しい形式で質問を追加します。

書式設定されたテキスト フィールドに既にある括弧を含めるには、regEx に何を追加する必要がありますか?

Edit2: 質問に回答しましたが、ボヘミアンのヒントごとにサンプルを追加して、この投稿に出くわした将来の学生がそれを利用できるようにします。申し訳ありませんが、私はこれが初めてです!

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

(123) 456-7890

4

3 に答える 3

4

(and )(最初の 3 桁を囲む)を一致させる必要があります。

次のように変更します。

pattern = Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");
                           ^^^      ^^^

ご覧のとおり、\\前に(とを追加しまし)た。なぜですか?

一部の文字には特別な意味があります。\\また、正規表現は Java の文字列であるため、 (Java では単一を表す) でエスケープする必要があります\

二重のバックスラッシュは特殊文字をエスケープして、その特別な意味を抑制します。次のように伝えます。

特殊文字と見なさず、通常の文字と見なして(ください」( .

于 2013-04-21T08:03:36.153 に答える
2

\\(\\)を使用して括弧を使用できます。これを試してください。

Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");
于 2013-04-21T08:05:00.710 に答える