2010-03-02 65 views

回答

17
EditText state = (EditText) findViewById(R.id.txtState); 


       Pattern ps = Pattern.compile("^[a-zA-Z ]+$"); 
       Matcher ms = ps.matcher(state.getText().toString()); 
       boolean bs = ms.matches(); 
       if (bs == false) { 
        if (ErrorMessage.contains("invalid")) 
         ErrorMessage = ErrorMessage + "state,"; 
        else 
         ErrorMessage = ErrorMessage + "invalid state,"; 

       } 
+0

使用正則表達式。 – UMAR 2010-03-22 11:55:04

+0

好主意..它幫助我制定屬於自己的邏輯......感謝:) – Noman 2012-11-27 14:24:41

+0

太空的情況 – 2017-08-01 07:30:36

1

嘗試這個

<EditText 
    android:id="@+id/EditText1" 
    android:text="" 
    android:inputType="text|textNoSuggestions" 
    android:textSize="18sp" 
    android:layout_width="80dp" 
    android:layout_height="43dp"> 
</EditText> 

其他的inputType可以發現 Here ..

+0

在文本的情況下它接受每一件事... – UMAR 2010-03-05 07:15:10

48
edittext.setFilters(new InputFilter[] { 
    new InputFilter() { 
     public CharSequence filter(CharSequence src, int start, 
       int end, Spanned dst, int dstart, int dend) { 
      if(src.equals("")){ // for backspace 
       return src; 
      } 
      if(src.toString().matches("[a-zA-Z ]+")){ 
       return src; 
      } 
      return ""; 
     } 
    } 
}); 

請測試徹底,但!

+1

的工作方式就像是魔法...... thanx – Richa 2013-07-04 05:13:46

+7

它對我沒有任何作用。我做了同樣的事情,但是當我在EditText中輸入數字或特殊字符時,它將刪除先前輸入的所有字符。爲什麼會這樣呢? – 2015-11-07 05:59:42

+0

@Nayana_Das這可能是因爲這一行'return「」;'。用一些沒有無效字符的文本替換該行,而不是返回空字符串。 – 2016-11-14 09:22:11

16

通過XML,你可以爲類型很容易地做到下面的XML(EDITTEXT)代碼...

android:digits="abcdefghijklmnopqrstuvwxyz" 

隻字也能接受...

118

添加這符合你的EditText標籤。

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 

你的EditText標籤應該是這樣的:

<EditText 
     android:id="@+id/editText1" 
     android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
+0

感謝它的完美工作,無需驗證條件...... !!!! – 2014-05-28 09:30:32

+4

非拉丁字符呢? – 2015-04-15 09:42:29

+5

無法輸入空格。如何讓它在單個空間 – Ravi 2015-06-04 12:28:41

0

如果有人仍想這一點,Java regex for support Unicode?是一個很好的一個。這是爲了當你只想要字母(不管是什麼編碼 - japaneese,瑞典語)是一個EditText。後來,你可以使用MatcherPattern.compile()

4

將代碼的EditText XML文件檢查,

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 
4

對於空間,你可以在數字加一個空格。如果你需要一個像點的任何特殊字符,也逗號,你可以到這個名單

機器人:位=「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」

9

對於那些誰希望自己的EDITTEXT應該只接受字母和空格(既不數字或任何特殊字符),那麼可以使用這個InputFilter。 這裏我創建了一個名爲getEditTextFilter()的方法,並在其中寫入了InputFilter。

public static InputFilter getEditTextFilter() { 
     return new InputFilter() { 

      @Override 
      public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 

       boolean keepOriginal = true; 
       StringBuilder sb = new StringBuilder(end - start); 
       for (int i = start; i < end; i++) { 
        char c = source.charAt(i); 
        if (isCharAllowed(c)) // put your condition here 
         sb.append(c); 
        else 
         keepOriginal = false; 
       } 
       if (keepOriginal) 
        return null; 
       else { 
        if (source instanceof Spanned) { 
         SpannableString sp = new SpannableString(sb); 
         TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0); 
         return sp; 
        } else { 
         return sb; 
        } 
       } 
      } 

      private boolean isCharAllowed(char c) { 
       Pattern ps = Pattern.compile("^[a-zA-Z ]+$"); 
       Matcher ms = ps.matcher(String.valueOf(c)); 
       return ms.matches(); 
      } 
     }; 
    } 

裝上此輸入過濾到您的EDITTEXT發現它後,像這樣:

mEditText.setFilters(new InputFilter[]{getEditTextFilter()}); 

原來歸功​​於@UMAR誰給了使用正則表達式和@KamilSeweryn

+2

最佳答案。不知道爲什麼沒有更多upvotes。 android:digits =「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」是最糟糕的解決方案,導致android:imeOption無法使用它。 – 2017-05-04 13:08:36

+0

@wonsuc什麼? – Alex78191 2017-10-08 18:33:13

+0

謝謝我從最近5天以來解決了這個問題現在解決.. – 2018-02-05 11:19:41

0

驗證的想法只允許EditText中的字母android:

InputFilter letterFilter = new InputFilter() { 
     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
      String filtered = ""; 
      for (int i = start; i < end; i++) { 
       char character = source.charAt(i); 
       if (!Character.isWhitespace(character)&&Character.isLetter(character)) { 
        filtered += character; 
       } 
      } 

      return filtered; 
     } 

    }; 
editText.setFilters(new InputFilter[]{letterFilter}); 
相關問題