【问题标题】:Check if string contains at least one of each: lowercase letter, uppercase letter, number, and special character检查字符串是否至少包含以下各项之一:小写字母、大写字母、数字和特殊字符
【发布时间】:2014-04-16 16:13:40
【问题描述】:

我搜索了 SO 和 Google,我发现的大多数示例似乎都没有按预期工作(或者没有结合所有这些元素)。我正在尝试创建一个匹配(通过)的正则表达式,如果字符串在字符串中包含 至少 以下 anywhere 之一,并且如果它缺少任何一个则失败他们:

  • 长度至少为 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";
}

问题是这没有按预期工作。以下Pass应该Fail(它们没有特殊字符):

  • 123牛仔
  • MonkeyCow123

它似乎可以很好地检测除特殊字符之外的所有字符。我做错了什么以及如何解决?

【问题讨论】:

    标签: c# asp.net regex


    【解决方案1】:

    (?=.*?^[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.
    

    在这个正则表达式中,字符类[] 中的^ 是对字符的否定。你快到了,可惜你把它放在[]之外了

    【讨论】:

      【解决方案2】:

      虽然有很多方法可以给这只猫换皮,但我更喜欢将这些代码包装到可重用的扩展方法中,这样以后做起来就很简单了。使用扩展方法时,您还可以避免使用 RegEx,因为它比直接字符检查要慢。我喜欢使用 Extensions.cs NuGet 包中的扩展。它使这项检查变得如此简单:

      1. https://www.nuget.org/packages/Extensions.cs 包添加到您的项目中。
      2. 将“using Extensions;”添加到代码顶部。
      3. "Smith23@".IsStrong() 将返回 True,而 "Smith23".IsStrong() 将返回 False。
      4. 其余代码中的所有其他检查都只是MyString.IsStrong()。默认情况下,.IsStrong() 会验证强字符串中是否使用了所有 4 个组件,但如果您只想使用 4 个组件中的 3 个,则可以像 MyString.IsStrong(3) 一样执行此操作。

      您的示例代码将变得如此简单:

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

      【讨论】:

        猜你喜欢
        • 2012-02-06
        • 2017-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 2012-03-24
        相关资源
        最近更新 更多