2012-02-04 186 views
1

卡住了一個愚蠢的問題。我有一個輸入字段,用戶可以在其中輸入有限的字母(ABCDEFG)。這裏是問題:我不希望用戶在輸入的單個子序列中能夠有超過3個A,C,E和G的字母,即:沒有AAA,CCC,EEE,GGG。第二件事情與第一件事情幾乎相同:在一個子序列中不超過1個B,D,F,即:沒有BB,DD,FF。這兩條規則是以某種方式結合在一起的。正則表達式:序列

因此,例如,AABFGECC是有效的。 GEFFFAABG無效。

希望你能幫助我!謝謝!

P.S如果它很重要,我正在使用Visual Basic編寫我的應用程序。但我認爲,這並不重要。

+0

no'AAA'實際上是「不超過2」,而不是3 ...順便說一句,這是VB.Net嗎? – Kobi 2012-02-04 20:28:56

回答

1

雖然你可能有更聰明和使用反向引用,一個簡單的解決方案是黑名單使用無效的序列的negative look ahead

^(?!.*(?:AAA|CCC|EEE|GGG|BB|DD|FF))[A-G]*$ 

從邏輯上講,這是具有這7個無效序列相同一個列表,並檢查字符串不包含任何一個,這也給你一個很好的選擇。

+0

如果我寫BBBBBBBBBBBBBBBBBBBBBBB會怎麼樣?它會通過嗎?它不應該。 – Dmitri 2012-02-04 20:36:48

+0

@Dmitri - 它包含一個「BB」,所以它不應該。看看負向預測是如何工作的 - 如果它*找到了「BB」,它將*不匹配*字符串。 – Kobi 2012-02-04 20:37:52

+0

啊!我明白你的意思。有趣。 – Dmitri 2012-02-04 20:41:48

2

如果您創建了一個匹配您想要避免的情況的表達式,而是檢查輸入不匹配,該怎麼辦?像這樣:

​​
+0

謝謝!現在我明白它是如何解決的! – Dmitri 2012-02-04 20:47:42