2013-01-16 38 views
2
^(?![\\s\\S]*(\\d{16})|[\\s\\S]*(\\d{9}))[\\s\\S]* 

上述正則表達式不允許字符串中的數字大於10個數字。 例如,如果用戶輸入測試1234567891.該文本是有效的文本。我們應該允許用戶輸入這個文本。 用戶只能輸入9位數字或16位數字。 例如,測試123456789應該是無效的。如何修改正則表達式。允許9和16位以外的字符串中的任何數字

+2

此正則表達式實際上是有缺陷的(不對稱的括號),即使你平衡他們,它仍然不會做你認爲它。 –

+0

@Andremoniy否定向前未關閉 – fge

+0

@fge,ups,我只是誤讀 – Andremoniy

回答

1

請勿使用正則表達式進行此類檢查。 Java有對字符串.length()

private static final Pattern DIGITS = "\\d+"; 

public boolean inputOK(String input) 
{ 
    Matcher m = DIGITS.matcher(input); 

    int len; 

    while (m.find()) { 
     len = m.group().length(); 
     if (len == 9 || len == 16) 
      return false; 
    } 

    return true; 
} 
6

這個要求最適合正則表達式嗎?我認爲這將是很多更具可讀性來檢查字符串的長度,如果你有一個數字。

有些人在遇到問題時想:「我知道,我會用 正則表達式。」現在他們有兩個問題。

並參見here

+0

可能是,但我認爲這個人有關於正則表達式的功課。 – Andremoniy

+0

@Andremoniy你可能是對的,但如果是這樣的話,我認爲這是一個不幸的選擇問題。學習編程語言和構造的很大一部分是學習如何選擇哪種工具用於給定的問題。要求某人研究如何使用螺絲刀來驅動釘子並不是教導螺絲刀和錘子正確使用的好方法。 –

相關問題