限制EditText输入类型与长度

这次遇到的问题是要对一个输入框可输入内容与长度做限制,以前的时候就在xml里面的EditText相应属性设置一下就好了

android:inputType="phone" // 电话
android:inputType="text" // 文字
android:inputType="number" // 数字

 长度也好搞,设置一个maxLength属性就ok了,但是如果需要限制输入的东西不是那种正好能概括的,上面的方法就不能用了,这个时候一般是用正则表达来限制输入。比如说,下面的代码就是对edittext限制了输入内容与输入长度的方法,中间是处理输入限制的逻辑,最后让edittext.setFilters,把这个过滤器放进去即可。

InputFilter filter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {
        String regEx = "^[a-zA-Z0-9\u4E00-\u9FA5]";  // 大小写的字母,0到9,汉字
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(source);
        String replace = m.replaceAll("").trim(); // 限制输入空格
        // 输入前就存在的字符长度
        int destCount = StringUtils.getCount(dest.toString());
        // 输入前就已满直接不接收
        if (destCount >= 32)
            return "";
        // 新输入的字符长度
        int sourceCount = StringUtils.getCount(replace);
        // 如果拼接后不超长,直接拼接
        if (destCount + sourceCount <= 32)
            return replace;
        // 超长时不应该直接拒绝,应在允许范围内尽量拼接
        if (destCount + sourceCount > 32)
            return "";
        return replace;
    }
};
edittext.setFilters(new InputFilter[]{filter});
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值