2

「http://developer.android.com/reference/java/util/regex/Pattern.html」に表示されるべきではないと記載されていても、正規表現が常にfalseを返すという問題があります。

あらゆる種類の特殊文字「&$ @ R @」を入力していますが、b/b2は両方ともlogcatでfalseを返しています。編集テキストに入力している文字列は、入力した文字列とまったく同じようにlogcatに表示されます。なぜそれが英数字と一致しないのかについて誰かが考えていますか?

コード:

    EditText et1 = (EditText) findViewById(R.id.editText1);
    String et1Text = et1.getText().toString();
    int et1Length = et1.getText().toString().length();
    EditText et2 = (EditText) findViewById(R.id.editText2);
    String et2Text = et2.getText().toString();
    int et2Length = et2.getText().toString().length();

    Pattern p = Pattern.compile("\\W");
    Log.d(TAG,et1Text);
    Matcher m = p.matcher(et1Text);
    boolean b = m.matches();
    if (b == true){
        Log.d(TAG,"True");
    }
    else {
        Log.d(TAG,"False");
    }
    Log.d(TAG,et2Text);
    Matcher m2 = p.matcher(et2Text);
    boolean b2 = m2.matches();
    if (b2 == true){
        Log.d(TAG,"True");
    }
    else {
        Log.d(TAG,"False");
    }

    if (et1Length < 4 | et1Length > 15 | et2Length < 4 | et2Length > 15){
        Log.d(TAG,"Length dialog");
        dialog(1);
    }

    if (b==true | b2==true){
        Log.d(TAG,"Special char dialog");
        dialog(1);
    }
4

6 に答える 6

2

まず、大文字は英数字以外Wの文字と一致します。次に、1つの文字のみに一致します。文字列に英数字のみが含まれていることを照合するには、次の正規表現を使用します。

String pattern = "[\\w]*";

\wアンダースコアにも一致することに注意してください。

于 2011-10-22T20:08:51.247 に答える
2

matches()文字列全体をパターンに一致させようとする代わりにfind()、パターンの出現箇所を見つけようとするだけの which を使用できます。ソース

于 2011-10-22T20:15:07.887 に答える
0

Matcher メソッドの「matches」は、領域全体に対してパターンを一致させようとします。正規表現 "\W" は、英数字以外の 1 文字に一致します。つまり、m.matches() は、単一の特殊文字に一致させようとすると true を返します。「&$@R@,」に一致させようとすると、文字列に英数字以外の文字が 1 つ以上含まれているため、false が返されます。

于 2011-10-22T20:04:13.853 に答える
0

\W(または Java 文字列リテラルとして"\\W") は、単語以外の 1 文字に一致します。このmatches()メソッドは、あたかも本当に"\\A\\W\\z". したがって、文字列が単語以外の文字1 つだけで構成されている場合にのみ、一致が得られます。1 つ以上の文字に一致させたい場合は、正規表現を次のように変更する必要があります。

"\\W+"
于 2011-10-22T20:52:55.990 に答える
0

Androidについてはわかりませんが、この正規表現は次のとおりです。

Pattern p = Pattern.compile("\\W");

英数字以外の文字と一致します。展開すると、次のようになります。

[^a-zA-Z0-9_]

_ を含む単一の英数字と一致させたい場合は、次を使用します。

Pattern p = Pattern.compile("\\w");

それ以外の場合:Pattern p = Pattern.compile("[a-zA-Z0-9]");

于 2011-10-22T19:52:54.893 に答える
0

すべての英数字に一致する正規表現が必要な場合は、 を試してください[a-zA-Z0-9]*文字列内の英数字以外のすべての文字に一致させたい場合は、これを試してください\\W*

于 2011-10-22T19:56:39.573 に答える