RegularExpressionValidator - 验证字符串与表达式不匹配

时间:2012-09-21 08:27:01

标签: c# asp.net regex

我正在尝试编写一个正则表达式(用于ASP.NET RegularExpressionValidator),以便:

如果要验证的字符串包含字母A后跟字母B,则验证失败。

如果要验证的字符串包含字母F后跟W,X,Y,Z或任何数字,验证应该失败。

我想出了这个

(AB)|(F(W|X|Y|Z|[0-9]))

但据我所知,如果输入与该表达式匹配,验证将成功。

如果输入与该表达式不匹配,我需要做什么才能使验证失败?

非常感谢,

大卫

4 个答案:

答案 0 :(得分:5)

这是negative lookaheads的用途

(?!.*AB)(?!.*F[WXYZ\d])

对这些字符串失败。它与任何文本都不匹配(如果您只想检查是否匹配,这应该足够了),因此匹配结果将始终为空字符串

答案 1 :(得分:3)

这样可行:

A[^B]|F[^WXYZ0-9]|[^AF].
  • a A后跟B以外的任何内容,或
  • F后跟W,X,Y,Z或数字或
  • 之外的任何内容
  • A或F后跟任何单个字符的其他内容

请注意,这也会匹配“A $”或“@@”。如果您只想匹配“一个字母后跟一个字母或数字”,请使用:

A[AC-Z0-9]|F[A-V]|[B-EG-Z][A-Z0-9]

正面比赛的正则表达式更好。

请注意,对于正则表达式验证程序,整个字符串必须匹配(如果只有子字符串匹配,则验证程序报告验证失败)

答案 2 :(得分:2)

您可以使用编程语言提供的逻辑非运算符来否定匹配操作返回的结果,而无需修改正则表达式。

修改:如果上述选项不是一个选项,请查看以下问题123

答案 3 :(得分:1)

您可以对此正则表达式进行匹配

^(?!^.*?AB)(?!^.*?F[WXYZ\d]).*$

Here一个有效的例子。基本上它意味着“找到除了包含AB的字符串之前和之后的所有字符串,除了那些包含F后跟W,X,Y,Z或数字的字符串”。 Tim Pietzcker的回答中提供的this链接信息