Comment puis-je entrer uniquement des alphabets dans EditText sous Android?
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,";
}
Ajoutez cette ligne avec votre balise EditText.
Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Votre balise EditText devrait ressembler à:
<EditText
Android:id="@+id/editText1"
Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" />
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 "";
}
}
});
s'il vous plaît tester à fond si!
Grâce à XML, vous pouvez facilement faire comme type de code suivant en XML (editText) ...
Android:digits="abcdefghijklmnopqrstuvwxyz"
seuls les caractères seront acceptés ...
Pour ceux qui veulent que leur editText n'accepte que les alphabets et les espaces (ni chiffres ni caractères spéciaux), on peut alors utiliser cette InputFilter
. Ici, j'ai créé une méthode nommée getEditTextFilter()
et écrit le filtre de saisie à l'intérieur.
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();
}
};
}
Attachez ce filtre d'entrée à votre editText après l'avoir trouvé, comme ceci:
mEditText.setFilters(new InputFilter[]{getEditTextFilter()});
Le crédit original va à @UMAR qui a donné l’idée de valider en utilisant l’expression régulière et @KamilSeweryn
Mettez le code XML edittext code,
Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Autoriser uniquement les alphabets dans 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});
Pour les espaces, vous pouvez ajouter un seul espace dans les chiffres. Si vous avez besoin de caractères spéciaux tels que point, virgule, vous pouvez également accéder à cette liste.
Android: digits = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Essaye ça
<EditText
Android:id="@+id/EditText1"
Android:text=""
Android:inputType="text|textNoSuggestions"
Android:textSize="18sp"
Android:layout_width="80dp"
Android:layout_height="43dp">
</EditText>
Vous pouvez trouver d’autres inputType Ici ..
Si quelqu'un le veut toujours, Java regex pour prendre en charge Unicode? est un bon. C’est pour quand vous voulez UNIQUEMENT des lettres (quel que soit l’encodage - japonais, suédois) est un EditText Plus tard, vous pourrez le vérifier en utilisant Matcher
et Pattern.compile()