【问题标题】:Problems with the following regular expression in RegularExpressionValidator controlRegularExpressionValidator 控件中以下正则表达式的问题
【发布时间】:2009-07-24 11:37:35
【问题描述】:

我写了下面的正则表达式。它应该只匹配不以 .aspx 结尾的文件名或文件夹名。

ValidationExpression=".*[^(\.aspx)]$"

但它不起作用。所以,正则表达式领域的国王,请帮助。我还想使 .Aspx、.aSPx 等扩展名无效(我很快了解到 .net 和 JScript 处理正则表达式的方式存在一些差异)。

谁能帮忙?

【问题讨论】:

  • 据我所知,这与该行中的最后一个元素是 a、s、p、x 或 a 相匹配。
  • 没有。它匹配一个不属于以下之一的字符:( . a s p x )

标签: c# javascript regex


【解决方案1】:

[^abc] 表示“匹配除 a、b 或 c 之外的一个字符”。你不想要一个否定的字符类,你想要消极的后视:

ValidationExpression=".*(?<!\.aspx)$"

Regex.IsMatch 中使用RegexOptions.IgnoreCase 作为选项,使其不区分大小写。

在 JavaScript 中,没有负面的lookbehind,您可以使用效率较低的带有负面lookahead 的版本:

ValidationExpression="^(?:(?!\.aspx$).)*$"

【讨论】:

  • 没有。 JavaScript 不支持lookbehind。您可以改为断言 .*\.aspx$ 与您的字符串不匹配。
  • 我试图通过设置 ValidationExpression 来逃避。
【解决方案2】:

正如 Al 指出的,您匹配的是字符类而不是“.aspx”。您正在寻找的正则表达式是:

.*(?<!.aspx$)

【讨论】:

  • 如果我使用它,当它尝试使用正则表达式时,我会从 javascript 中得到一个异常。
【解决方案3】:

您遇到的问题是您使用的是字符类,因此您已指定最后一个字符不能是 '(' 或 '\' 或 '.' 或 'a' 等。

你需要消极的看待背后,所以像:

".*(?<!\.aspx)$"

请参阅here 了解更多详情。 ASP 中的语法可能略有不同。

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多