我目前有以下的正則表達式接受任何數值,是七位數經常用於驗證數值
表達^\d{7}
如何改善它,所以它會接受的數值七八十個數字?
通行證:,1234567,,123467890
失敗:123456,12345678,123456789
我目前有以下的正則表達式接受任何數值,是七位數經常用於驗證數值
表達^\d{7}
如何改善它,所以它會接受的數值七八十個數字?
通行證:,1234567,,123467890
失敗:123456,12345678,123456789
一個簡單的解決辦法是這樣的:
^\d{7}(\d{3})?$
至少有兩件事情與此解決方案注意:
\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
這不會接受7到10位數字嗎? – 2010-05-25 21:07:12
對不起,我誤解了這個問題。現在修好! – 2010-05-25 21:07:54
你是對的;它會接受7到10個字符。 – 2010-05-25 21:09:20
@Mark你的意思是因爲它沒有尾隨'$'?我把它排除在外,因爲OP確實,但是,在技術上:) – 2010-05-25 21:09:51
是的,但它與原始正則表達式的「鬆散」相匹配。:) – 2010-05-25 21:10:02
@Mark它如果你正在做全字符串匹配 – 2010-05-25 21:15:51
何不的字面解釋你在找什麼:
^\d{7}|\d{10}$
爲了便於閱讀 – 2010-05-25 21:25:12
除了這樣也不能正常工作,因爲這實際上是'^ \ d {7}'或'\ d {10} $'。您需要在其中添加一個非捕獲組,例如'^(?:\ d {7} | \ d {10})$'。 – 2010-05-25 21:30:42
+ +1爲了讓機器做好工作,而不是我 – Bananeweizen 2010-05-25 21:31:37
您使用什麼語言?並非所有的正則表達式都是相等的。 – 2010-05-25 21:23:07
@Mark:我正在使用C#。 – 2010-05-25 21:25:28