如何为除引号或多个连字符之外的任何文本编写正则表达式?

时间:2011-10-21 14:54:20

标签: asp.net regex

有人能告诉我如何为“无引号(单引号或双引号)允许写正则表达式,只允许使用单个连字符”?例如,"good"'good'good--looking不被允许(但good-looking是)。

我需要把这个正则表达式如下:

<asp:RegularExpressionValidator ID="revProductName" runat="server" 
     ErrorMessage="Can not have &quot; or '." Font-Size="Smaller" 
     ControlToValidate="txtProductName" 
     ValidationExpression="^[^'|\"]*$"></asp:RegularExpressionValidator>

我所拥有的是双引号和单引号。现在我需要在那里添加多个连字符。我这样说"^[^'|\"|--]*$",但它不起作用。

2 个答案:

答案 0 :(得分:2)

^(?:-(?!-)|[^'"-]++)*$

应该这样做。

^          # Start of string
(?:        # Either match...
 -(?!-)    # a hyphen, unless followed by another hyphen
|          # or
 [^'"-]++  # one or more characters except quotes/hyphen (possessive match)
)*         # any number of times
$          # End of string

答案 1 :(得分:1)

因此,当'"--时,正则表达式必须失败。 因此,regexp应该在每个位置尝试这个,如果找到了,那么失败:

^(?:(?!['"]|--).)*$

我们的想法是使用.消费所有行,但每次使用.时都要检查',或",或者--

另外,我非常喜欢其他答案。它采用了一种不同的方法。它仅使用非'"符号([^'"]),如果它消耗-,则会检查是否有其他-

此外,还有一种方法可以在字符串中搜索'"--,然后在找到正则表达式时失败。我可以通过使用正则表达式条件表达式来实现。但这种正则表达式引擎似乎不支持这种条件。