【发布时间】:2017-03-12 13:46:31
【问题描述】:
我想验证我的用户输入是否满足以下条件。 它应该由4-7个数字组成 它不应该有像 1111 这样的连续数字 它不应该有像 1234 这样的序列号
我们可以使用 {4,7} 应用范围 4-7,但不确定剩余条件。
您能否建议我们如何为 java 实现这一目标
【问题讨论】:
-
不仅仅是建议,最好先尝试一下,看看会发生什么
我想验证我的用户输入是否满足以下条件。 它应该由4-7个数字组成 它不应该有像 1111 这样的连续数字 它不应该有像 1234 这样的序列号
我们可以使用 {4,7} 应用范围 4-7,但不确定剩余条件。
您能否建议我们如何为 java 实现这一目标
【问题讨论】:
不要使用正则表达式。
算法 >
(尝试捕捉)
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;
}
}
【讨论】:
使用两组正则表达式。使用一个来匹配明显的东西,如 1111|2222|3333|4444|5555|6666|7777|8888|9999|0000|1234|2345|3456|4567... 并强制失败。然后做简单模式:'^[0-9]{4,7}$'
您的问题是试图在一个正则表达式上完成所有操作。积极搜索排除项和允许的位。
【讨论】:
应该由4-7个数字组成
正如你提到的那样,这是微不足道的:
^[0-9]{4,7}$
它不应该有像 1111 这样的连续数字
这只是检查有 no 匹配:
([0-9])\1+
它不应该有像 1234 这样的连续数字
我相信几乎所有正则表达式引擎都不会在匹配的实际符号内执行数字比较。更多信息here。我会尝试使用除正则表达式之外的其他东西,例如从第二个元素开始的简单 for 循环,比较前一个元素是否是当前元素加一。 O(n)
【讨论】: