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;
}
}在更改或编辑字段时,它只接受0-9。
editText.setFilters(new InputFilter[]{new FilterActivity(3)});我知道android 中的“数字十进制和数字”中的属性,但是我尝试使用正则表达式来解决这个问题。
发布于 2017-07-01 07:26:45
我同意@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]?)$"如果它们也可以是大写的
发布于 2017-07-01 07:23:48
试一试
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;
}
}https://stackoverflow.com/questions/44858413
复制相似问题