2013-10-06 48 views
0

我有一個onTextChangedListener它觀察EditText是否包含任何「非單詞」字符,如此;使用.contains和\ W驗證對話框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

String.contains()不檢查正則表達式。所以在你的情況下,你只是檢查String"\W"。 它做了一個簡單的(Sub-)字符串比較。

一種解決方法是

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); 
    } 
} 
+0

乾杯,最好我想在這種情況下使用'setError'但它似乎我可能需要訴諸正如你所描述的,在「無效」字符上執行'replaceAll'。 –

+0

你可以使用'setError()'。我的回答只是你的'String.contains(「\\ W」)''的一種解決方法。 – flx

+0

只是修改了使用你的代碼的答案。 – flx