【发布时间】:2019-04-23 10:07:52
【问题描述】:
我有一个 Edittext,我希望只允许数字和小数(分隔符后最多 2 个小数,例如 125.50)。
我为此实现了一个过滤器:
final EditText field1 = (EditText)findViewById(R.id.field1);
field1.setFilters(new InputFilter[] { filter });
InputFilter filter = new InputFilter() {
final int maxDigitsBeforeDecimalPoint=5;
final int maxDigitsAfterDecimalPoint=2;
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder(dest);
builder.replace(dstart, dend, source
.subSequence(start, end).toString());
if (!builder.toString().matches(
"(([0-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?"
)) {
if(source.length()==0)
return dest.subSequence(dstart, dend);
return "";
}
return null;
}
};
这工作正常,但问题是,如果用户单独插入小数点分隔符,我会得到 java.lang.NumberFormatException: For input string: "."
在我的 ontextChanged 中,我尝试了这个:
if(field1.getText().toString().equals("[.]")){field1.setText(0);}
还有这个
if(field1.getText().toString().equals(".")){field1.setText(0);}
但没用。
如何单独限制小数分隔符,但允许使用数字?
【问题讨论】:
-
试试这个
^[1-9]\d*(\.\d+)?$正则表达式它允许带有可选小数点后跟数字的数字。 1-9 范围内的数字后跟零个或多个其他数字,然后可选地后跟一个小数点,后跟至少 1 个数字:
标签: java android android-edittext decimal