我有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是否包含此类字符,只是为了替换它们。有解决方法吗?
答案 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);
}
}