2010-03-02 5 views

Antwort

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,"; 

       } 
gefunden werden kann
+0

mit regulärem Ausdruck. – UMAR

+0

Tolle Idee .. es half mir bei der Herstellung meiner eigenen Logik ... Danke :) – Noman

+0

Was ist mit Raum –

1

Try This

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

Andere input Here ..

+0

im Falle von Text akzeptiert es alles ... – UMAR

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 ""; 
     } 
    } 
}); 

bitte allerdings gründlich testen!

+1

funktioniert magisch ... danke – Richa

+7

Es hat nicht für mich funktioniert.Ich habe das gleiche gemacht, aber wenn ich Zahlen oder Sonderzeichen in EditText eintrage, werden alle Zeichen entfernt, die früher eingegeben wurden. Warum ist es so? –

+0

@Nayana_Das Das könnte daran liegen, dass die Zeile 'return" ";'. Ersetzen Sie diese Zeile durch einen Text ohne das ungültige Zeichen, anstatt eine leere Zeichenfolge zurückzugeben. –

16

Durch XML können Sie folgenden Code in XML (editText) leicht als Typ tun ...

android:digits="abcdefghijklmnopqrstuvwxyz" 

wird nur Zeichen akzeptiert werden ...

118

Fügen Sie diese Zeile mit Ihrem EditText Tag .

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 

Ihr EditText Tag sollte wie folgt aussehen:

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

Dank seiner perfekt funktionierenden und keine Validierung Bedingung erforderlich ... !!!! –

+4

Was ist mit nicht lateinischen Zeichen? –

+5

Nicht in der Lage, Leerzeichen einzugeben. Wie man einzelnen Platz darin erlaubt – Ravi

0

Wenn jemand dies noch will, Java regex for support Unicode? gut ist. Es ist für, wenn Sie wollen, NUR Buchstaben (egal welche Kodierung - Japaneese, Sweedish) ist ein EditText. Später können Sie es Matcher mit überprüfen und Pattern.compile()

4

Put Code EditText XML-Datei,

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 
4

Für Räume können Sie Leerzeichen in den Ziffern hinzufügen. Wenn Sie Sonderzeichen wie Punkt benötigen, Komma Sie können auch auf dieser Liste

android: Stellen = „ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz“

9

Für diejenigen, die wollen, dass ihre editText nur Buchstaben und Raum annehmen sollte (weder Numerik oder irgendwelche Sonderzeichen), dann kann man diese InputFilter verwenden. Hier habe ich eine Methode mit dem Namen getEditTextFilter() erstellt und den InputFilter darin geschrieben.

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(); 
      } 
     }; 
    } 

Fügen Sie diesen Eingangsfilter auf Ihre editText, nachdem es zu finden, wie folgt aus:

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

Die ursprüngliche Kredit @UMAR geht, die die Idee der Validierung mit regulären Ausdruck und @KamilSeweryn gab

+2

Die beste Antwort. Keine Ahnung warum nicht mehr upvotes. android: digs = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ist die beste Lösung, die android verursacht: imeOption funktioniert nicht. –

+0

@wonsuc was für? – Alex78191

+0

danke ich steckte dieses Problem seit den letzten 5 Tagen jetzt gelöst .. –

0

Erlauben Sie nur Alphabete in 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}); 
Verwandte Themen