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

Posted

技术标签:

【中文标题】如何限制 EditText 输入只允许 3 位整数或小数【英文标题】:How to limit the EditText input only allow 3 digits of number either integer or decimal 【发布时间】: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() 

    //^\-?(\d0,5|\d0,5\.\d0,3)$
    //^\-?(\d0,3|\d0,2\.\d0,1|\d0,1\.\d0,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("^\\-?(\\d0,3|\\d0,2\\.\\d0,1|\\d0,1\\.\\d0,2)$") ? null : "";
        

        return null;
    
;

我确实从@Suman Dash 提到的示例代码中修改了正则表达式。 我对正则表达式的理解

^\-?(\d0,3|\d0,2\.\d0,1|\d0,1\.\d0,2)$

是允许特定模式的数字输入,例如#.##、##.# 和###。 当我测试代码时,模式#.## 和##.# 工作正常,但模式### 也允许像“.##”这样的输入,例如“.88”作为合法输入。而且它将小数点视为合法数字,所以我只能输入“.88”,而不是“.123”。无论如何,我不希望任何数字以小数点开头。 我怎样才能消除它? 实现这一目标的最佳方法是什么?谢谢!

【问题讨论】:

如果声明为android:inputType = "numberDecimal" ,您的android 手机或虚拟AVD 将只允许您输入满足您在xml 文件中设置的要求的数据。如果您想做更复杂的验证,您应该使用.getText().trim() 从您的editText 中获取文本并应用您的验证。 请看这里。这似乎几乎是同样的问题。 ***.com/questions/27077507/… 【参考方案1】:
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));


此代码可能会对您有所帮助。

【讨论】:

以上是关于如何限制 EditText 输入只允许 3 位整数或小数的主要内容,如果未能解决你的问题,请参考以下文章

关于Android下控制Edittext的输入的整数长度。

Objective-C如何限制文本字段在2次输入后只允许特定字符

EditText中输入信息的限制的方法

EditText 限制输入整数和小数 的位数

android EditText密码框,怎么让它只显示密码点,不让它显示最后一位输入的字符?

如何限制 EditText 中的输入?