2

即使“http://developer.android.com/reference/java/util/regex/Pattern.html”声明它不应该,我也遇到正则表达式总是返回错误的问题。

我正在输入各种特殊字符“&$@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匹配任何字母数字字符。其次,您只匹配一个字符。要匹配该字符串仅包含字母数字字符,请使用以下正则表达式:

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

注意\w也匹配下划线。

于 2011-10-22T20:08:51.247 回答
2

而不是matches()尝试将整个字符串与模式匹配,您可以使用find()它来尝试查找模式的任何出现。来源

于 2011-10-22T20:15:07.887 回答
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 回答
0

Matcher 方法“matches”尝试将 Pattern 与整个区域进行匹配。正则表达式“\W”匹配单个非字母数字字符。换句话说,当您尝试将 m.matches() 匹配到 SINGLE 特殊字符时,它将返回 true。如果您尝试将其与“&$@R@”匹配,它将返回 false,因为该字符串包含的不仅仅是一个非字母数字字符。

于 2011-10-22T20:04:13.853 回答
0

\W(或作为 java 字符串文字,"\\W")匹配一个非单词字符。该matches()方法在两端隐式锚定匹配,就好像你真的写了"\\A\\W\\z". 因此,只有当字符串只包含一个非单词字符时,您才会得到匹配。如果要匹配一个或多个字符,则应将正则表达式更改为

"\\W+"
于 2011-10-22T20:52:55.990 回答