Reputation: 487
I want to restrict my edittext to only accept farsi charecters . charecters like ض ص ث ق ف And so on .
I've tried to use xml digit but it did not work .
how can I do so ?
Upvotes: 4
Views: 672
Reputation: 1425
These code can help too:
InputFilter nameFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (Character.isLetterOrDigit(source.charAt(i))) { // if digit!
String blockCharacterSet = getString(R.string.all_fa_words) + ' ';
if (blockCharacterSet.contains(String.valueOf(source.charAt(i)))) {
edtNameEdit.setHintTextColor(getResources().getColor(R.color.materialWhite));
edtNameEdit.setHint(getString(R.string.name_lastname));
return null;
} else {
edtNameEdit.setHintTextColor(getResources().getColor(R.color.sPink));
edtNameEdit.setHint(getString(R.string.name_lastname) + ' ' + getString(R.string.must_fa));
return edtNameEdit.getText().toString();
}
} else {
return null;
}
}
return null;
}
};
edtNameEdit.setFilters(new InputFilter[]{nameFilter});
edtNameEdit.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Upvotes: 0
Reputation: 573
You can use InputFilter for the EditText. InputFilters can be attached to Editables to constrain the changes that can be made to them.
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
String text = String.valueOf(source.charAt(i));
Pattern RTL_CHARACTERS = Pattern.compile("[\u0600-
\u06FF\u0750-\u077F\u0590-\u05FF\uFE70-\uFEFF]");
Matcher matcher = RTL_CHARACTERS.matcher(text);
if (matcher.find()) {
return ""; // it's Persian
}
}
return null;
}
};
Use this filter to detect Farsi/Persian characters and restrict them for edittext. Set this filter to your EditText using
editText.setFilters(new InputFilter[]{filter});
This will restrict Farsi/Persian characters
Upvotes: 1