j jones
j jones

Reputation: 487

android- restrict edittext to accept farsi characters only

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

Answers (2)

Hadi Note
Hadi Note

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

Hammad Akram
Hammad Akram

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

Related Questions