我想验证我的用户输入以满足以下条件。它应该由4-7个数字组成,不应该有像1111这样的连续数字,也不应该有像1234这样的序列号
我们可以使用{4,7}应用范围4-7,但不确定其余条件。
您能建议我们如何在java中实现这一点吗?
发布于 2016-10-30 12:45:13
它应该由4-7个数字组成
正如你提到的,这是微不足道的:
^[0-9]{4,7}$
它不应该有像1111这样的连续数字
此命令仅检查是否存在与以下项匹配的:
([0-9])\1+
它不应该有像1234这样的序列号
我相信几乎所有的正则表达式引擎都不会在实际匹配的符号中执行数字比较。更多信息here。为此,我会尝试使用regex之外的其他方法,例如,从第二个元素开始比较前一个元素是否为当前元素加1的简单for循环。O(n)
发布于 2016-10-30 13:04:15
使用两组正则表达式。使用一个来匹配明显的东西,比如1111|2222|3333|4444|5555|6666|7777|8888|9999|0000|1234|2345|3456|4567...和强制失败。然后执行简单模式:'^0-9{4,7}$‘
您的问题是试图在一个正则表达式上完成所有这些操作。积极地搜索排除项和允许的位。
发布于 2016-11-01 00:24:59
不要使用正则表达式。
算法>
如果输入不是数字,则
(尝试捕捉)
str.split("");
Integer.parseInt(str);
(num>1111 && num<9999999)
if (numarr[i] + 1 != numarr[i + 1]) {//Not sequential}
if (numarr[i] != numarr[i + 1]) {//Not repeated}
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;
}
}
https://stackoverflow.com/questions/40325879
复制相似问题