【发布时间】:2020-01-09 20:10:16
【问题描述】:
正如标题所说,我在我的活动中设置了一个 EditText,并希望将输入限制为仅数字。但是,它是十进制数还是整数都没有关系。我确实要求位数限制在3位。例如输入'123'、'1.23'、'12.3'都是合法输入。
'1234'、'123.'、'.123'都是非法输入。
我已经尝试设置了
android:inputType = "numberDecimal"
在 xml 文件中。
并将最大长度设置为 4。
编辑:
我也尝试了以下代码:
InputFilter filter = new InputFilter() {
//^\-?(\d{0,5}|\d{0,5}\.\d{0,3})$
//^\-?(\d{0,3}|\d{0,2}\.\d{0,1}|\d{0,1}\.\d{0,2})$
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (end > start) {
// adding: filter
// build the resulting text
String destinationString = dest.toString();
String resultingTxt = destinationString.substring(0, dstart) + source.subSequence(start, end) + destinationString.substring(dend);
// return null to accept the input or empty to reject it
return resultingTxt.matches("^\\-?(\\d{0,3}|\\d{0,2}\\.\\d{0,1}|\\d{0,1}\\.\\d{0,2})$") ? null : "";
}
return null;
}
};
我确实从@Suman Dash 提到的示例代码中修改了正则表达式。 我对正则表达式的理解
^\-?(\d{0,3}|\d{0,2}\.\d{0,1}|\d{0,1}\.\d{0,2})$
是允许特定模式的数字输入,例如#.##、##.# 和###。 当我测试代码时,模式#.## 和##.# 工作正常,但模式### 也允许像“.##”这样的输入,例如“.88”作为合法输入。而且它将小数点视为合法数字,所以我只能输入“.88”,而不是“.123”。无论如何,我不希望任何数字以小数点开头。 我怎样才能消除它? 实现这一目标的最佳方法是什么?谢谢!
【问题讨论】:
-
如果声明为
android:inputType = "numberDecimal",您的android 手机或虚拟AVD 将只允许您输入满足您在xml 文件中设置的要求的数据。如果您想做更复杂的验证,您应该使用.getText().trim()从您的editText 中获取文本并应用您的验证。 -
请看这里。这似乎几乎是同样的问题。 *.com/questions/27077507/…
标签: java android regex android-edittext