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;
}
}
当更改或编辑字段时,它接受a,2a我只需要接受0-9
editText.setFilters(new InputFilter[]{new FilterActivity(3)});
我知道android “number Decimal and number”中的属性,但我尝试使用正则表达式来解决这个问题。
答案 0 :(得分:1)
我同意@horcrux但我认为因为你的乘数从0开始,你可以省略“?”:
"^([0-9]{0,"+(beforeDecimal-1)+"})$"
如果你不需要捕捉结果,你甚至可以省略括号:
"^[0-9]{0,"+(beforeDecimal-1)+"}$"
但你需要锚点(^和$)来表示比赛的左侧或右侧可能没有任何内容。
@Raj如果我正确理解你对@horcrux的答案,那么你在数字后面有可选字母吗? 尝试:
"^([0-9]{0,"+(beforeDecimal-1)+"}[a-z]?)$"
或:
"^([0-9]{0,"+(beforeDecimal-1)+"}[a-zA-Z]?)$"
如果它们也可以是大写
答案 1 :(得分:0)
尝试
public class FilterActivity implements InputFilter {
public FilterActivity(int beforeDecimal) { }
@Override
public CharSequence filter(CharSequence charSequence, int start, int end, Spanned spanned, int spanstart, int spanend) {
for (int i = start; i < end; i++) {
if (!Character.isDigit(charSequence.charAt(i))) {
return "";
}
}
return null;
}
}