加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 在安卓editText的用法

发布时间:2020-12-14 06:42:23 所属栏目:百科 来源:网络整理
导读:这里我原本的意图是限制editText的输入,限制为两位小数,但是改到最后,这个小数还是可能存在前导0。如果不考虑开始的负号时,可以取消前导0,把第一位分类讨论就行了。但是如果要考虑到第一位的“-”我就不知道该怎么办了。 我发现他在正则匹配的时候,你

这里我原本的意图是限制editText的输入,限制为两位小数,但是改到最后,这个小数还是可能存在前导0。如果不考虑开始的负号时,可以取消前导0,把第一位分类讨论就行了。但是如果要考虑到第一位的“-”我就不知道该怎么办了。

我发现他在正则匹配的时候,你不能限定后面的内容一定存在,否则他就认为你当前这个不一定合法,比如[0-1]{1,1}[3-4]{1,1}这种写法根本就不会被editText认可,因为你即便第一个数字按下了0,但是他认为你第二个数字不一定按3和4所以就给你否了,这就导致你什么内容都不能输入。。。

所以为了解决这个问题,我要让用户凭空输入一个“-”被认为是合法的,只要在正则规则单独加一条“-”就行了,再处理数据的时候,要对这种情况只有一个“-”的情况特判一下。


再总结一下简单的规则:

[0-9]{2,7} 有2~7个0~9之间的数字

(blabla)? (blabla)出现0~1次

| 或

java里对小数点要用双斜杠转义“.”,各个用法不太一样,反正查一下就好


txt_answer1.setFilters(new InputFilter[]{new NumberInputFilter()});


public class NumberInputFilter implements InputFilter {
        private Pattern mPattern;

        public NumberInputFilter() {
            //String pattern="-[1-2]{1,1}";
            String pattern="-?[0-9]{0,9}((.[0-9]{0,2})?)";
            //String pattern="([1-9]{1,1}[0-9]{0,5}((.[0-9]{0,2})?))|([0]{1,1}((.[0-9]{0,2})?))";
            this.mPattern=Pattern.compile(pattern);

        }

        @Override
        public CharSequence filter(CharSequence source,int start,int end,Spanned destination,int destinationStart,int destinationEnd) {
            if (end > start) {
                // adding: filter
                // build the resulting text
                String destinationString = destination.toString();
                String resultingTxt = destinationString.substring(0,destinationStart) + source.subSequence(start,end) + destinationString.substring(destinationEnd);
                // return null to accept the input or empty to reject it
                return resultingTxt.matches(this.mPattern.toString()) ? null : "";
            }
            // removing: always accept
            return null;
        }

    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读