Java 自定义输入筛选器接受正则表达式中的数值
更改或编辑字段时,它接受a,我只需要接受0-9Java 自定义输入筛选器接受正则表达式中的数值,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
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]?)$"