EditText如何限制输入内容

来源:互联网 发布:网络死人吹 编辑:程序博客网 时间:2024/05/16 14:39

其实我们经常遇到这样的需求,需要我们限制输入框的内容。比如,在做一个应用的登录模块的时候,可能就需要我们限制用户名和密码的格式。假如需求是用户名和密码必须都是英文字母或者数字组成,你会怎么做?可能你首先想到的是利用正则表达式,当然正则表达式可以做到,但是总有种杀鸡用牛刀的感觉。其实上面这个需求,我们只需要给EditText设置digits属性就可以了,用法如下:

<EditText    android:id="@+id/et_test"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:digits="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"    />
是不是很简单,同样我们还可以通过代码的方式来限制输入框的内容,如下:
editText= (EditText) findViewById(R.id.et_test);
InputFilter[] filters = new InputFilter[1];filters[0] = new MyInputFilter("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789");editText.setFilters(filters);
public class MyInputFilter extends LoginFilter.UsernameFilterGeneric {    private String mAllowedDigits;    public MyInputFilter( String digits ) {        mAllowedDigits = digits;    }    @Override    public boolean isAllowed(char c) {        if (mAllowedDigits.indexOf(c) != -1) {            return true;        }        return false;    }}
假如还有位数限制的话,我们可以在配合maxLength属性来限制,上面两种做法达到的效果是完全一样的,这种做法的缺陷是假如输入的内容不符合我们的规范,是直接不能输入的,可是有的需求是不符合规范的也可以输入,在发送请求的时候才去验证,这时候我们就需要用正则表达式去做了。原来我们对密码的验证,如下:

/** * 检查密码是否合法 * * @param pwd * @return */public  boolean checkPassword( String pwd) {    if (pwd == null || pwd.length() == 0) {        Toast.makeText(this,"密码不能为空",Toast.LENGTH_SHORT).show();        return false;    }    if (pwd.length() <6) {        Toast.makeText(this,"密码长度不能少于6",Toast.LENGTH_SHORT).show();        return false;    }    if (pwd.length() >18) {        Toast.makeText(this,"密码长度不能超过18",Toast.LENGTH_SHORT).show();        return false;    }    char[] c = pwd.toCharArray();    for (int i = 0; i < c.length; i++) {//去中文        if ((c[i] >= 0x4e00) && (c[i] <= 0x9fbb)) {            Toast.makeText(this,"密码中不能含有中文字符",Toast.LENGTH_SHORT).show();            return false;        }    }    String regEx = "[a-zA-Z0-9]{6,18}$"; //表示英文字母或数字并且是6-18    Pattern pat = Pattern.compile(regEx);    Matcher mat = pat.matcher(pwd);    boolean rs = mat.matches();    if (!rs) {        Toast.makeText(this,"密码格式中可能含有其他非法字符",Toast.LENGTH_SHORT).show();        return false;    }    return true;}
好了就写这么多了~



0 0