2010-05-25 23 views
1

我目前有以下的正則表達式接受任何數值,是七位數經常用於驗證數值

表達

^\d{7}

如何改善它,所以它會接受的數值七八十個數字?

通行證:,1234567,,123467890
失敗:123456,12345678,123456789

+0

您使用什麼語言?並非所有的正則表達式都是相等的。 – 2010-05-25 21:23:07

+0

@Mark:我正在使用C#。 – 2010-05-25 21:25:28

回答

5

一個簡單的解決辦法是這樣的:

^\d{7}(\d{3})?$ 

至少有兩件事情與此解決方案注意:

  • 在一個unicode上下文中,\d可能比你想要的要多得多(例如digi的外來字符其他非拉丁語言)。
  • 此正則表達式包含一個捕獲組。你可能不希望這樣。您可以通過將其更改爲非捕獲組(?: ...)來解決此問題。

所以你可能要改用這稍長表達這些原因:

^[0-9]{7}(?:[0-9]{3})?$ 

下面是C#一個小測試平臺,這樣就可以看到它的工作原理:

for (int i = 0; i < 12; ++i) 
{ 
    string input = new string('0', i); 
    bool isMatch = Regex.IsMatch(input, "^[0-9]{7}(?:[0-9]{3})?$"); 
    Console.WriteLine(i.ToString().PadLeft(2) + ": " + isMatch); 
} 

結果:

 
0: False 
1: False 
2: False 
3: False 
4: False 
5: False 
6: False 
7: True 
8: False 
9: False 
10: True 
11: False 
+0

這不會接受7到10位數字嗎? – 2010-05-25 21:07:12

+0

對不起,我誤解了這個問題。現在修好! – 2010-05-25 21:07:54

+0

你是對的;它會接受7到10個字符。 – 2010-05-25 21:09:20

3

編輯:這是錯誤的,但我會取消刪除它,並將其留作參考,因爲upvotes表明人們認爲它是正確的。正確的解決方法是here


我認爲只是:

^\d{7}\d{3}? 
+0

@Mark你的意思是因爲它沒有尾隨'$'?我把它排除在外,因爲OP確實,但是,在技術上:) – 2010-05-25 21:09:51

+0

是的,但它與原始正則表達式的「鬆散」相匹配。:) – 2010-05-25 21:10:02

+0

@Mark它如果你正在做全字符串匹配 – 2010-05-25 21:15:51

2

何不的字面解釋你在找什麼:

^\d{7}|\d{10}$ 
+1

爲了便於閱讀 – 2010-05-25 21:25:12

+3

除了這樣也不能正常工作,因爲這實際上是'^ \ d {7}'或'\ d {10} $'。您需要在其中添加一個非捕獲組,例如'^(?:\ d {7} | \ d {10})$'。 – 2010-05-25 21:30:42

+0

+ +1爲了讓機器做好工作,而不是我 – Bananeweizen 2010-05-25 21:31:37