gpt4 book ai didi

java - 如何限制EditText输入只允许3位整数或小数

转载 作者:行者123 更新时间:2023-12-02 00:54:37 28 4
gpt4 key购买 nike

正如标题所示,我在 Activity 中设置了一个 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”。无论如何,我不希望任何数字以小数点开头。我怎样才能消除它?实现这一目标的最佳方法是什么?谢谢!

最佳答案

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)
{
if (!Pattern.compile("[1234567890\.]*").matcher(String.valueOf(source.charAt(i))).matches())
{
return "";
}
}
return null;
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText ntxt =(EditText)findViewById(R.id.numberEditTextbox) ;
ntxt.setFilters(new InputFilter[]{filter,new InputFilter.LengthFilter(4)});

}

此代码可能对您有帮助。

关于java - 如何限制EditText输入只允许3位整数或小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830629/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com