1

ユーザー入力の検証に TextWatcher と正規表現を使用しようとしています。複雑な正規表現があることに注意してください。

edit.addTextChangedListener(new TextWatcher() {           
            private final Pattern m_regex = Pattern.compile("([a-zA-Z]{4}[ ]{0,1}){7}");

            @Override
            public void afterTextChanged(Editable s) {
                  String text = s.toString();
                  int length = text.length();

                  if(!m_regex.matcher(text).matches() && length > 0) {
                       s.delete(length - 1, length);
                  }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}

        });

ここでの問題は、マッチャーが 2 つの文字列状態のみをチェックできることです: 一致するものと、指定された式に一致しないものですが、入力の検証では、文字列がパターンと一致しないが、それと矛盾しない場合の中間状態もチェックする必要があります。 . 入力された文字列を検証するために正規表現を使用できる方法はありますEditTextか?

4

1 に答える 1

1

別の正規表現と照合します。答えがばかげているように思われる場合は申し訳ありませんが、前に言ったように、マッチャーは 2 つの文字列状態のみをチェックできます: match と no match

編集:

私はあなたの質問をよく理解しました。これを行うことができます:入力とこの正規表現をテストします

^(([a-zA-Z]{4}[ ]{0,1}){0,6}([a-zA-Z]{0,4})|([a-zA-Z]{4}))$

これにより、テキストが挿入されていることが検証されます。問題がなければ、ユーザーに続行させます。正規表現は、ユーザーがテキストの入力を終了したときにのみ使用する必要があります! -

または、ユーザーが書き込みを終了したかどうかを確認する場合は、次のようにします。私が書いた正規表現を照合して、テキストが正しいかどうかを確認します。一致する場合は、ユーザーはテキストの挿入を完了しています。

于 2012-09-26T11:58:42.593 に答える