首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义输入筛选器接受正则表达式中的数字值。

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

Stack Overflow用户
提问于 2017-07-01 07:20:49
回答 2查看 733关注 0票数 0
代码语言:javascript
复制
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。

代码语言:javascript
复制
editText.setFilters(new InputFilter[]{new FilterActivity(3)});

我知道android 中的“数字十进制和数字”中的属性,但是我尝试使用正则表达式来解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-01 07:26:45

我同意@horcrux,但我认为既然您的乘数从0开始,您可以省略“?”

代码语言:javascript
复制
"^([0-9]{0,"+(beforeDecimal-1)+"})$"

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

代码语言:javascript
复制
"^[0-9]{0,"+(beforeDecimal-1)+"}$"

但是,您将需要锚(^和$)来指示,比赛的左或右可能没有任何东西。

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

代码语言:javascript
复制
"^([0-9]{0,"+(beforeDecimal-1)+"}[a-z]?)$"

或者:

代码语言:javascript
复制
"^([0-9]{0,"+(beforeDecimal-1)+"}[a-zA-Z]?)$"

如果它们也可以是大写的

票数 1
EN

Stack Overflow用户

发布于 2017-07-01 07:23:48

试一试

代码语言:javascript
复制
    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;
     }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44858413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档