ASP.Net:RegularExpressionValidator ValidationExpression一次防止`;`和`-`

时间:2011-10-11 19:00:53

标签: c# asp.net regex validation

我想制作一个ASP.Net RegularExpressionValidator ValidationExpression来防止输入;–-

我可以为执行此操作,它是ValidationExpression="[^-]*"

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

上面的表达式可以防止单个字符。我将允许单个字符。我将阻止双个字符(--)。 我需要一次阻止;

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

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

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

打破它:

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

第一组括号中的表达式将匹配不包含m-dash和分号的任何字符集。您可能希望使用\x2014转义序列替换m-dash的十六进制值。使用?=将其定义为非消耗,这意味着Regex引擎必须匹配此模式,但在找到匹配时不会推进其索引,因此将为下一个模式测试相同的字符集

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

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

将其插入到Derek Slater's之类的正则表达式测试程序中,并使用它来确保它将停止所需的所有方案。