EditText 输入限制

最近项目,遇到一个需求输入姓名只能是韩文(棒子的app),不能有任何的数字,特殊符号,英文字母。。。

本来以为很简单 查询一下韩文Unicode 范围”\uAC00-\uD7A3”

然后想当然的写一个正则
"^[\uAC00-\uD7A3]+$"

然后写一个Edittext 继承EditText

public class LimitEditText extends EditText {

    public LimitEditText(Context context) {
        super(context);
    }

    public LimitEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LimitEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 输入法
     * @param outAttrs
     * @return
     */
    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        return new mInputConnecttion(super.onCreateInputConnection(outAttrs),
                false);
    }
}

class mInputConnecttion extends InputConnectionWrapper implements InputConnection {

    public mInputConnecttion(InputConnection target, boolean mutable) {
        super(target, mutable);
    }

    /**
     * 对输入的内容进行拦截
     *
     * @param text
     * @param newCursorPosition
     * @return
     */
    @Override
    public boolean commitText(CharSequence text, int newCursorPosition) {
        // 只能输入汉字
        if (!text.toString().matches("^[\uAC00-\uD7A3]+$") || text.toString().matches("^[0-9]*$")) {
            return false;
        }
        return super.commitText(text, newCursorPosition);
    }

    @Override
    public boolean sendKeyEvent(KeyEvent event) {
        return super.sendKeyEvent(event);
    }

    @Override
    public boolean setSelection(int start, int end) {
        return super.setSelection(start, end);
    }
}

以为这样就ok了
测试还可以,但是用了一下go输入法 输入一切比较正常
但是如果在英文时候切换阿拉伯数字输入,就能把数字输入到edittext里
debug 发现在英文切数字之后 输入数字根本进入

 @Override
    public boolean commitText(CharSequence text, int newCursorPosition) {
        // 只能输入汉字
        if (!text.toString().matches("^[\uAC00-\uD7A3]+$") || text.toString().matches("^[0-9]*$")) {
            return false;
        }
        return super.commitText(text, newCursorPosition);
    }

这段方法

无解~~换方式

直接用原生的editText 设置一个Filters

userNameTxt.setFilters(new InputFilter[]{
                    new InputFilter() {
                        @Override
                        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                            String regex = "^[\uAC00-\uD7A3]+$";
                            boolean isKr = Pattern.matches(regex, source.toString());
                            if (!isKr) {
                                return "";
                            }
                            return null;
                        }
                    }
            });

这样 测试通过 可以过滤所有规则以外的。

如有不对的地方,欢迎大神指正。
完结 撒花~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值