我想制作一个ASP.Net RegularExpressionValidator
ValidationExpression
来防止输入;
和–-
。
我可以为–
执行此操作,它是ValidationExpression="[^-]*"
。
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
runat="server"
ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="**"
ValidationExpression="[^-]*"></asp:RegularExpressionValidator>
上面的表达式可以防止单个–
字符。我将允许单–
个字符。我将阻止双–
个字符(--
)。
我需要一次阻止;
和–
。
任何人都可以帮助我吗?
答案 0 :(得分:2)
正则表达式需要变得更聪明。您想要阻止多个连字符,m-dash和分号。
所以,试试@"^(?=[^–;]*)((?!--).)*$"
打破它:
^
匹配行的开头,并有助于确保验证程序用于匹配整个字符串。
第一组括号中的表达式将匹配不包含m-dash和分号的任何字符集。您可能希望使用\x2014
转义序列替换m-dash的十六进制值。使用?=
将其定义为非消耗,这意味着Regex引擎必须匹配此模式,但在找到匹配时不会推进其索引,因此将为下一个模式测试相同的字符集
第二组括号中的表达式是反向前瞻;它将匹配任何不包含两个(或更多)相邻连字符的字符集。然而,这可能有点慢;这个正则表达式基本上迫使正则表达式引擎一次考虑一个字符,从那一点向前看,以确保下一个字符不会与逆模式匹配。
尾随$
标志着一行的结尾;它与^
一起确保您在确定匹配时查看单个字符串(或多行数据中的行)中的所有内容。
将其插入到Derek Slater's之类的正则表达式测试程序中,并使用它来确保它将停止所需的所有方案。