2011-08-29 59 views
2

我要驗證其可以含有1編號,以7的字符串,並且使其最大長度爲7如何驗證字符的重複字符串中的

([1-7]){0,7} 

條件:否數量應在重複串。

如:

12345 true; 
11345 false (1 is repeated) ; 
98014 false (0,8,9 are invalid); 
+1

重複或獨特? –

+0

換句話說:12341是否有效? –

+0

獨特... 12341無效 –

回答

3

這可以在一個單一的正則表達式來完成:

^(?!.*(.).*\1)[1-7]{0,7}$ 

先行斷言檢查,該字符串中的所有字符都是獨一無二的,實際的正則表達式只允許0-7數字1和7

之間

在Java:

boolean foundMatch = subjectString.matches("^(?!.*(.).*\\1)[1-7]{0,7}$"); 

當然你也可以做先行未能通過[1-7]替換每個.快,但對於clarit爲了我的緣故,我選擇了不要。 (如果使用.matches()方法,那麼您可以刪除^$錨點,因爲它們在這種情況下是隱含的)。

2

我想你可以使用兩個表達式。一個驗證的長度和數字:

/^[1-7]{0,7}$/ 

,一個用於測試一個數字是否重複

/(\d).*\1/ 

\1是第一個捕獲組的值的引用。

通過兩者的結合,您可以驗證字符串。例如在JavaScript:

< /^[1-7]{0,7}$/.test(12345) && !/(\d).*\1/.test(12345) 
> true 
-- 
< /^[1-7]{0,7}$/.test(11345) && !/(\d).*\1/.test(11345) 
> false 
1

你可以扭轉檢查,即如果它匹配[^1-7]|.{8}|(.).*\1那麼它是無效的。