Java 自定义输入筛选器接受正则表达式中的数值

Java 自定义输入筛选器接受正则表达式中的数值,java,android,regex,Java,Android,Regex,更改或编辑字段时,它接受a,我只需要接受0-9 public class FilterActivity implements InputFilter { Pattern pattern; public FilterActivity(int beforeDecimal) { pattern=Pattern.compile("([0-9]{0,"+(beforeDecimal-1)+"})?"); } @Override public CharSequence filter(CharSe

更改或编辑字段时,它接受a,我只需要接受0-9

public class FilterActivity implements InputFilter {
Pattern pattern;

public FilterActivity(int beforeDecimal) {
    pattern=Pattern.compile("([0-9]{0,"+(beforeDecimal-1)+"})?");
}

@Override
public CharSequence filter(CharSequence charSequence, int start, int end, Spanned spanned, int spanstart, int spanend) {
    Matcher matcher=pattern.matcher(spanned);
    if(!matcher.matches()){
        return "";
    }
    return null;
}
}
我知道android中的属性“数字十进制和数字”,但我尝试使用正则表达式来解决这个问题。

试试看

editText.setFilters(new InputFilter[]{new FilterActivity(3)});
公共类过滤器活动实现InputFilter{
公共筛选器活动性(整数在十进制之前){}
@凌驾
公共CharSequence筛选器(CharSequence CharSequence、int start、int end、跨距、int spanstart、int spanend){
for(int i=start;i
我同意@horcrux,但我认为既然乘数从0开始,你可以省略“?”:

如果不需要捕捉结果,甚至可以省略括号:

"^([0-9]{0,"+(beforeDecimal-1)+"})$"
但您需要锚定(^和$)来指示比赛的左侧或右侧可能没有任何内容

@Raj如果我正确理解你对@horcrux的回答,那么你在数字后面有可选字母吗? 尝试:

或:


如果它们也可以是大写的

请尝试“^([0-9]{0,+(Decimal-1之前)+”})?$”您想在这里做什么?@horcrux EditText接受第一个字母接受任何值,更改EditText时,后跟字符的数字接受所有值(例如,它可以接受1a、1.:等等)尝试这样更改
FilterActivity实现DigitsKeyListener实现InputFilter
,而不是您正在使用的内容。@Tim EditText接受数字和最小长度,而不使用属性inputType=“number | | numberdCimal”Ya!问题发生在android上,这就是我附加android代码的方式。。。感谢解释正则表达式..Heiko您对python的期望值高吗
"^([0-9]{0,"+(beforeDecimal-1)+"})$"
"^[0-9]{0,"+(beforeDecimal-1)+"}$"
"^([0-9]{0,"+(beforeDecimal-1)+"}[a-z]?)$"
"^([0-9]{0,"+(beforeDecimal-1)+"}[a-zA-Z]?)$"