Android中如何为EditText设置规则:首位输入数字、第二位仅输入字母
问题根因
你原有代码的逻辑是对所有输入的字符统一强制校验为数字,没有结合EditText已输入内容的长度做分位规则判断,因此所有非数字的输入都会被直接拦截,自然无法输入第二位要求的字母。
修正后的实现代码
public static InputFilter[] myfilter = new InputFilter[]{ new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { // 逐个校验本次输入的每一个字符 for (int i = start; i < end; i++) { char currentInput = source.charAt(i); // 计算当前输入字符最终落在全文的索引位置 int positionInWholeText = dstart + (i - start); if (positionInWholeText == 0) { // 第一位仅允许数字 if (!Character.isDigit(currentInput)) { return ""; } } else if (positionInWholeText == 1) { // 第二位仅允许字母 if (!Character.isLetter(currentInput)) { return ""; } } // 第三位及以后的规则可按需自行补充,当前默认不限制 } return null; } } };
调用逻辑保持不变即可:
edittext1.setFilters(myfilter);
可选扩展规则
- 如需限制总输入长度,可在
myfilter数组中新增new InputFilter.LengthFilter(你要的最大长度)即可 - 如需限制第二位字母的大小写,可将
Character.isLetter替换为Character.isLowerCase或Character.isUpperCase - 代码已兼容粘贴输入场景,即使一次性粘贴多字符也会按位置逐个校验规则
内容的提问来源于stack exchange,提问作者Juna Elias
相关产品推荐
相关产品推荐

