我想验证我的用户输入以符合以下条件。 它应包括4-7号 它不应该有连续的号码,如1111 它不应该有像1234没有连续或连续数字的正则表达式
序列号,我们可以使用{4,7},但不能确定适用范围4-7剩余条件。
能否请你建议我们如何才能做到这一点的Java
我想验证我的用户输入以符合以下条件。 它应包括4-7号 它不应该有连续的号码,如1111 它不应该有像1234没有连续或连续数字的正则表达式
序列号,我们可以使用{4,7},但不能确定适用范围4-7剩余条件。
能否请你建议我们如何才能做到这一点的Java
至于你提到它应包括4-7号
的这一个简单的:
^[0-9]{4,7}$
它不应该有像1111
这一个只检查有没有匹配为:
([0-9])\1+
它不应该有顺序的号码,如1234
我相信几乎所有的正则表达式引擎不执行相匹配的实际符号中的数字比较。更多信息here。我试着用正则表达式来替代它,例如是一个简单的for循环,从第二个元素开始比较,如果前一个元素是当前元素加上一个。 O(n)
使用两组正则表达式。使用其中一个匹配1111 | 2222 | 3333 | 4444 | 5555 | 6666 | 7777 | 8888 | 9999 | 0000 | 1234 | 2345 | 3456 | 4567 ...等显而易见的东西,并强制失败。然后做简单的模式:'^ [0-9] {4,7} $'
你的问题是试图在一个正则表达式上做到这一切。正面搜索排除和允许的位。
不使用正则表达式。
ALGO>
停止输入不号码。
(尝试捕捉)
转换输入到STR数和数量的阵列。
str.split(“”);
整数。parseInt函数(STR);
使用数字来检查范围4-7。
(NUM> 1111 & & NUM < 9999999)
使用阵列来检查连续&的序列号。
如果(numarr [I] + 1!= numarr第[i + 1]){//不是顺序}
如果(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);
如果((NUM> 1111 & & NUM < 9999999)& & issequential(numarr)& & isrepeated(numarr)!){ 的System.out.println( “有效的用户:” + NUM); } else { System.out.println(“Invalid user:”+ num); } } catch(java.lang.NumberFormatException e){ System.err.println(“ID is not number:”+ e); } } 私有静态布尔isrepeated(INT [] numarr){ 对(INT I = 0;我< numarr.length - 1;我++)!{ 如果(numarr [I] = numarr第[i + 1] ){ System.out.println(“不重复”); 返回false; } } System.out.println(“repeated”); 返回true; (numarr [i] + 1!= numarr [i + 1])(0) ){ System.out.println(“Not sequential”); 返回false; } } System.out.println(“sequential”); 返回true; (String str){ } String [] strarr = str.split(“”); int [] intarr = new int [str.length()]; (int i = 0; i < strarr.length; i ++)intarr [i] = Integer.parseInt(strarr [i]); return intarr; }}
[如何问堆栈溢出问题(http://stackoverflow.com/help/asking) –
不是暗示,好先试一下,看看会发生什么 – kajahno