2011-10-11 77 views
0

我想做一个ASP.Net RegularExpressionValidatorValidationExpression这将阻止输入;–-。我可以做,它是ValidationExpression="[^-]*"ASP.Net:RegularExpressionValidator ValidationExpression一次阻止`;`和`-`

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" 
     runat="server" 
     ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="**" 
     ValidationExpression="[^-]*"></asp:RegularExpressionValidator> 

以上表达式可以防止单个的字符。我会给予单个角色的许可。我会阻止双重个字符(--)。 我需要一次防止;

任何人都可以帮助我吗?

+1

http://en.wikipedia.org/wiki/Regular_expression –

回答

2

正则表达式需要变得更聪明。您想阻止多个连字符,m-dash和分号。

所以,尽量@"^(?=[^–;]*)((?!--).)*$"

其分解:

^一行的开头匹配,并有助于确保验证用于整个字符串相匹配。

第一组圆括号中的表达式将匹配任何不包含m-dash和分号的字符集。您可能需要使用\x2014转义序列替换m-dash的十六进制值。它被定义为非消耗的?=,这意味着正则表达式引擎必须匹配这个模式,但是当它找到匹配时不会推进它的索引,所以同样的一组字符也将被测试下一个模式。

第二组圆括号中的表达式是反向预测;它将匹配任何不包含两个(或更多)相邻连字符的字符集。然而,这可能有点慢。这个正则表达式基本上会迫使正则表达式引擎一次一个地考虑每个字符,从这个角度展望未来,以确保下一个字符不会匹配逆向模式。

尾随$标志着一条线的终点;与^一起确保您在确定匹配时查看单个字符串(或多行数据中的行)中的所有内容。

将此插入到像Derek Slater's这样的正则表达式测试程序中,并使用它来确保它将停止所有您想要的场景。

+0

感谢您的帮助... –