如何将过滤器添加到EditTex?

时间:2020-01-13 14:24:40

标签: java android

创建类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});
 }
}

1 个答案:

答案 0 :(得分:0)

您的匹配测试是对字符串要替换进行的,但是您想查看替换文本。

尝试此代码:

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]");
    }
}
相关问题