我想驗證我的用戶輸入以符合以下條件。 它應包括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