否定正则表达式以使用 MVC 验证属性

Negating a regex for use MVC validation attributes

如果在正则表达式属性(MVC 数据注释)中找不到 return true 的匹配项,我们是否可以否定此表达式?

模式应匹配:

  1. 少于 8 个字符的任何内容或
  2. 任何没有数字的东西或
  3. 没有大写的任何东西或
  4. 任何没有特殊字符的东西

我要否定这个expression/pattern

[RegularExpression(@"^(.{0,7}|[^0-9]*|[^A-Z]*|[a-zA-Z0-9]*)$")]

我尝试了 ?! 但没有成功:

[RegularExpression(@"^(?!.{0,7}|[^0-9]*|[^A-Z]*|[a-zA-Z0-9]*)$")]

参考这个回答:Regex password validation, reverse logic

要否定包含多个锚定替代项的表达式,您需要将它们分组在一个锚定的否定前瞻中。

因此,只需添加一个组(捕获或非捕获):

"^(?!(?:.{0,7}|[^0-9]*|[^A-Z]*|[a-zA-Z0-9]*)$).*$"

由于 RegularExpressionAttribute 需要完整的字符串匹配,我添加了 .*$.