2016-10-30 431 views
-1

我想验证我的用户输入以符合以下条件。 它应包括4-7号 它不应该有连续的号码,如1111 它不应该有像1234没有连续或连续数字的正则表达式

序列号,我们可以使用{4,7},但不能确定适用范围4-7剩余条件。

能否请你建议我们如何才能做到这一点的Java

+0

[如何问堆栈溢出问题(http://stackoverflow.com/help/asking) –

+0

不是暗示,好先试一下,看看会发生什么 – kajahno

回答

1

至于你提到它应包括4-7号

的这一个简单的:

^[0-9]{4,7}$ 

它不应该有像1111

这一个只检查有没有匹配为:

([0-9])\1+ 
  • 匹配相同的文字的先前匹配的组([0-9]),1倍以上(从两个数字的重复)。如果您有更具体的重复标准,就像第一种情况一样使用括号。

它不应该有顺序的号码,如1234

我相信几乎所有的正则表达式引擎不执行相匹配的实际符号中的数字比较。更多信息here。我试着用正则表达式来替代它,例如是一个简单的for循环,从第二个元素开始比较,如果前一个元素是当前元素加上一个。 O(n)

0

使用两组正则表达式。使用其中一个匹配1111 | 2222 | 3333 | 4444 | 5555 | 6666 | 7777 | 8888 | 9999 | 0000 | 1234 | 2345 | 3456 | 4567 ...等显而易见的东西,并强制失败。然后做简单的模式:'^ [0-9] {4,7} $'

你的问题是试图在一个正则表达式上做到这一切。正面搜索排除和允许的位。

+0

问题在这里更多4-7位数的限制。遵循这种方法将从1111 | ... | 1111111等等。可能需要一段时间才能匹配_明显的东西_ – kajahno

+0

匹配1111默认匹配1111111。你可以在正则表达式匹配这些东西,但^(\ d)\ 1 {3,6} $应该匹配任何字符,然后3-6更多的结尾。那个肯定是可行的。像54321这样的计数位或东西很难,但是您可以将它们全部输入到我所关心的所有位置。这些事情是判断不良密码种类的判断。你可能只是有一个禁止的数字列表并搜索这些数字。这个问题含糊不清。 – Tatarize

0

不使用正则表达式。

ALGO>

  1. 停止输入不号码。

    (尝试捕捉)

  2. 转换输入到STR数和数量的阵列。

    str.split(“”);

    整数。parseInt函数(STR);

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

    (NUM> 1111 & & NUM < 9999999)

  4. 使用阵列来检查连续&的序列号。

    如果(numarr [I] + 1!= numarr第[i + 1]){//不是顺序}

    如果(numarr [I]!= numarr第[i + 1]){//不重复}

  5. 打印决定。

    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; }}

相关问题