首页 > 解决方案 > 如何向 EditTex 添加过滤器?

问题描述

创建类 InputFilterMix 以添加我想拒绝的特殊字符

public class InputFilterMix implements InputFilter {
    @Override
    public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
        if (isCharacter(charSequence.toString())) {
            return "";
        } else if (charSequence.toString().matches("\\d*")) {
            return "";
        }
        return charSequence.toString();
    }

    private boolean isCharacter(String s) {
        return s.matches("[^a-zA-Z0-9-' '-\u0621-\u064A]");
    }
}

然后我将此添加到 myActivity 以实现 InputFilterMix

public class myActivity extends AppCompatActivity  {

    private EditText name;

    InputFilterMix inputFilterMix = new InputFilterMix();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        name = (EditText) findViewById(R.id.phone_number);

        name.setFilters(new InputFilter[]{inputFilterMix});
 }
}

标签: javaandroid

解决方案


您的匹配测试是在要替换的字符串上完成的,但您想检查替换文本。

试试这个代码:

public class InputFilterMix implements InputFilter {
    @Override
    public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
        final CharSequence replacementText = charSequence.subSequence(i, i1);
        final CharSequence replacedText = spanned.subSequence(i2, i3);

        if (isCharacter(replacementText.toString())) {
            return "";
        } else if (replacementText.toString().matches("\\d*")) {
            return "";
        }
        return replacedText.toString();
    }

    private boolean isCharacter(String s) {
        return s.matches("[^a-zA-Z0-9-' '-\u0621-\u064A]");
    }
}

推荐阅读