2012-02-04 182 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