繁体   English   中英

如何限制EditText输入仅允许3位数字(整数或十进制)

[英]How to limit the EditText input only allow 3 digits of number either integer or decimal

如标题所述,我在活动中设置了一个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)});

}

此代码可以为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM