2016-10-30 481 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; }}

相關問題