我想验证用户输入以符合以下条件。 它应该包含4-7个数字 它不应该有像1111这样的连续数字 它不应该有像1234
这样的连续数字我们可以使用{4,7}来应用范围4-7但不确定剩余条件。
你能否建议我们如何为java实现这个目标
答案 0 :(得分:1)
它应包含4-7个数字
正如你所提到的那样,这是微不足道的:
^[0-9]{4,7}$
它不应该有连续的数字,如1111
这只是检查没有匹配:
([0-9])\1+
它不应该有像1234
这样的连续数字
我相信几乎所有正则表达式引擎都不会在匹配的实际符号中执行数字比较。更多信息here。我尝试使用除正则表达式之外的其他内容,例如从第二个元素开始的简单for循环,比较前一个元素是当前元素加一个。为O(n)
答案 1 :(得分:0)
使用两套正则表达式。使用一个匹配明显的东西,如1111 | 2222 | 3333 | 4444 | 5555 | 6666 | 7777 | 8888 | 9999 | 0000 | 1234 | 2345 | 3456 | 4567 ...并强制失败。然后进行简易模式:'^ [0-9] {4,7} $'
您的问题是尝试在一个正则表达式上完成所有操作。积极搜索排除和允许的位。
答案 2 :(得分:0)
不要使用正则表达式。
Algo>
如果输入不是数字则停止。
(试试)
将输入str转换为数字和数组数组。
str.split( “”);
的Integer.parseInt(STR);
使用数字来检查范围4-7。
(num> 1111&& num< 9999999)
使用数组来检查连续&序号。
if(numarr [i] + 1!= numarr [i + 1]){// Not sequential}
if(numarr [i]!= numarr [i + 1]){//不重复}
打印决定。
public class myjava {
public static void main(String [] args){
String str;
str =“12346a”;
str =“12345”;
str =“22222”;
str =“12346”;
尝试{
int num = Integer.parseInt(str);
int [] numarr = getarr(str);
if((num> 1111&& num< 9999999)&&!issequential(numarr)&&!isrepeated(numarr)){
System.out.println(“有效用户:”+ num);
}
其他{
System.out.println(“无效用户:”+ num);
}
}
catch(java.lang.NumberFormatException e){
System.err.println(“ID不是数字:”+ 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(“不重复”);
返回false; }
}
的System.out.println( “重复”);
返回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(“不顺序”);
返回false; }
}
的System.out.println( “连续”);
返回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]);
返回intarr;
}
}