使用.contains和\\ W验证Dialog EditText

时间:2013-10-06 22:36:56

标签: android android-edittext contains

我有onTextChangedListener观看EditText以查看它是否包含任何“非单词”字符,如此;

input.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {}
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (input.getText().toString().contains("\\W")) {
                input.setError("Error");
            }
            else{

            }

        }});

但是,我的代码似乎不会将("\\W")识别为非单词字符。我用它来检查其他EditTexts,但在这些情况下它只是替换任何非单词字符而不提示哪个工作正常;

String locvalidated = textLocation.getText().toString().replaceAll("\\W", "-");

似乎我无法使用\\W检查EditText是否包含此类字符,只是为了替换它们。有解决方法吗?

1 个答案:

答案 0 :(得分:0)

String.contains()不会检查正则表达式。因此,在您的情况下,您只需检查String "\W"。 它进行简单的(子)字符串比较。

解决方法是

String s = input.getText().toString();
boolean hasNonWord = !s.equals(s.replaceAll("\\W", "x"));

所以,在你的情况下:

public void onTextChanged(CharSequence s, int start, int before, int count) {
    String s = input.getText().toString();
    if (!s.equals(s.replaceAll("\\W", "x"))) {
        input.setError("Error");
    } else {
        input.setError(null);
    }
}