首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于无连续或连续数字的正则表达式

用于无连续或连续数字的正则表达式
EN

Stack Overflow用户
提问于 2016-10-30 11:48:45
回答 3查看 4.8K关注 0票数 0

我想验证我的用户输入以满足以下条件。它应该由4-7个数字组成,不应该有像1111这样的连续数字,也不应该有像1234这样的序列号

我们可以使用{4,7}应用范围4-7,但不确定其余条件。

您能建议我们如何在java中实现这一点吗?

EN

回答 3

Stack Overflow用户

发布于 2016-10-30 12:45:13

它应该由4-7个数字组成

正如你提到的,这是微不足道的:

代码语言:javascript
运行
复制
^[0-9]{4,7}$

它不应该有像1111这样的连续数字

此命令仅检查是否存在与以下项匹配的

代码语言:javascript
运行
复制
([0-9])\1+

  • 与之前的匹配组(0-9)匹配相同的文本,匹配次数超过1次(从两个数字的重复开始)。如果你有一个更具体的重复标准,就像第一种情况一样使用括号。

它不应该有像1234这样的序列号

我相信几乎所有的正则表达式引擎都不会在实际匹配的符号中执行数字比较。更多信息here。为此,我会尝试使用regex之外的其他方法,例如,从第二个元素开始比较前一个元素是否为当前元素加1的简单for循环。O(n)

票数 1
EN

Stack Overflow用户

发布于 2016-10-30 13:04:15

使用两组正则表达式。使用一个来匹配明显的东西,比如1111|2222|3333|4444|5555|6666|7777|8888|9999|0000|1234|2345|3456|4567...和强制失败。然后执行简单模式:'^0-9{4,7}$‘

您的问题是试图在一个正则表达式上完成所有这些操作。积极地搜索排除项和允许的位。

票数 1
EN

Stack Overflow用户

发布于 2016-11-01 00:24:59

不要使用正则表达式。

算法>

如果输入不是数字,则

  1. 停止。

(尝试捕捉)

  1. 将输入字符串转换为数字和数字数组。

代码语言:javascript
运行
复制
   str.split("");

   Integer.parseInt(str); 

  1. 使用数字检查范围4-7。

(num>1111 && num<9999999)

  1. 使用数组检查连续和序列号。

代码语言:javascript
运行
复制
 if (numarr[i] + 1 != numarr[i + 1]) {//Not sequential}

 if (numarr[i]     != numarr[i + 1]) {//Not repeated}

  1. 打印决策。

代码语言:javascript
运行
复制
    public class myjava {
        public static void main(String[] args) {
            String str;
            str = "12346a";
            str = "12345";
            str = "22222";
            str = "12346";
            try{
                int num = Integer.parseInt(str);
                int[] numarr= getarr(str);          
                if((num > 1111 && num < 9999999) && !issequential(numarr) && !isrepeated(numarr) ){
                    System.out.println("valid user:"+num);
                }
                else {
                    System.out.println("Invalid user:"+num);
                }
            }
            catch(java.lang.NumberFormatException e){
                System.err.println("ID is not number :"+e);
            }
        }
        private static boolean isrepeated(int[] numarr) {
            for (int i = 0; i < numarr.length - 1; i++) {
                if (numarr[i] != numarr[i + 1]) {
                    System.out.println("Not repeated");
                    return false; }
            }
            System.out.println("repeated");
            return true;
        }
        private static boolean issequential(int[] numarr) {
            for (int i = 0; i < numarr.length - 1; i++) {
                if (numarr[i] + 1 != numarr[i + 1]) {
                    System.out.println("Not sequential");
                    return false; }
            }
            System.out.println("sequential");
            return true;
        }
        private static int[] getarr(String str) {
            String[] strarr = str.split("");
            int[] intarr = new int[str.length()];
            for(int i=0;i < strarr.length;i++) intarr[i]=Integer.parseInt(strarr[i]);
            return intarr;
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40325879

复制
相关文章

相似问题

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