检查字符串是否至少包含以下每个字符串:小写字母,大写字母,数字和特殊字符

Dan*_*Dan 2 c# regex asp.net

我搜索了SO和Google,我发现的大多数示例似乎没有按预期工作(或者没有将所有这些元素组合在一起).我正在尝试创建一个匹配(传递)的Regex表达式,如果一个字符串字符串中的任何位置包含至少一个以下内容,并且如果它缺少任何一个则失败:

  • 至少8个字符的长度
  • 大写字母
  • 小写字符
  • 特殊字符(包括句号,下划线等,即白名单方法不可取 - 允许任何非字母数字字符)

这就是我尝试过的:

if (System.Text.RegularExpressions.Regex.IsMatch(txtTest.Text.Trim(), "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?^[a-zA-Z0-9_@.-]).{8,}$"))
{
    lblMsg.Text = "Pass";
}
else
{
    lblMsg.Text = "Fail";
}
Run Code Online (Sandbox Code Playgroud)

问题是这不符合预期.以下通行证应该失败(他们没有特殊字符):

  • 123cowboY
  • MonkeyCow123

它似乎可以很好地检测所有特殊字符.我做错了什么,我该如何解决?

Sab*_*san 13

改变(?=.*?^[a-zA-Z0-9_@.-])如下:

       + see here
(?=.*?[^a-zA-Z0-9_@.-])
                 ^^ i kept the dot, hyphen, etc as you used, if you don't need, remove.
Run Code Online (Sandbox Code Playgroud)

在这个正则表达式中,^字符类的内部[]是否定字符.你几乎就在那里,不幸的是你把它放在了外面[]