做了正则校验,只能输入数字和小数点的input框
复现步骤:
①正常输入,失去焦点时获取的值是对的
②输入了特殊字符(比如 @、#、~、%,因为输入框已经做了正则检验不可输入特殊字符,所以即使输入了也不会显示,但是造成了获取不到输入框里的最新值的bug)
代码:
oninput中不应该是item.right_model吗,value是哪来的?
有没有 js 的处理代码,觉得跟这个也有关系。
对于这个问题,我理解的是在进行正则校验后,输入框中输入了特殊字符导致获取不到输入框中的最新值。解决这个问题,可以通过两个方法:
editText.addOnInputListener(new EditText.OnInputEventListener() {
@Override
public void onInputEvent(EditText view, Editable input) {
// 获取输入框中的文本内容
String content = input.toString();
// 判断是否含有特殊字符
if (content.matches("[^0-9.]")) {
// 如果有特殊字符,将其替换为""
input.replace(0, input.length(), content.replaceAll("[^0-9.]", ""));
}
}
});
InputFilter filter = 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 c = source.charAt(i);
if (!Character.isDigit(c) && c != '.') {
// 如果是特殊字符,就返回空字符""
return "";
}
}
// 如果没有特殊字符,就返回原字符
return source;
}
};
// 将该过滤器设置给EditText
editText.setFilters(new InputFilter[]{filter});
以上两种方法都能够解决这个问题,具体使用哪种方法可以根据实际场景进行选择。