【问题标题】:.NET Regular expression which check length and non-alphanumeric characters.NET 正则表达式检查长度和非字母数字字符
【发布时间】:2011-01-08 06:50:29
【问题描述】:

我需要正则表达式来验证字符串的最小长度为 6,并且它至少包含一个非字母数字字符,例如:"eN%{S$u)""h9YI!>4j""{9YI!;4j""eN%{S$usdf)""dfh9YI!>4j""ghffg{9YI!;4j"

这个运行良好 ^.*(?=.{6,})(?=.*\\d).*$" 但在字符串不包含任何数字的情况下(例如 "eN%{S$u)")它不起作用。

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:
    ^(?=.{6})(.*[^0-9a-zA-Z].*)$
    

    我们使用正向预测来确保至少有 6 个字符。然后我们匹配查找至少一个非字母数字字符 ([^0-9a-zA-Z]) 的模式。 .* 匹配这个非字母数字字符周围的任意数量的任意字符,但是当我们到达这里时,我们已经检查了我们至少匹配了 6 个。

    ^.*(?=.{6,})(?=.*\\d).*$"
    

    是您尝试的正则表达式。以下是一些建议:

    • 您无需在前瞻中匹配超过 6 个字符。此处仅匹配 6 并不限制正则表达式的其余部分匹配超过 6。
    • \d 匹配一个数字,(?=.*\\d) 是其中一个的前瞻。这就是为什么您在使用 eN%{S$u) 之类的字符串时遇到您提到的问题的原因。
    • 即使上面的点不是错误的并且这里的正则表达式是正确的,您也可以将第二个前瞻与.* 结合起来,只需使用.*\\d.*

    【讨论】:

      【解决方案2】:

      marcog 的回答非常好,但我会反其道而行之,以便更容易添加更多条件(例如至少有一个数字或其他),并且我会使用惰性量词,因为它们是某些模式更便宜:

      ^(?=.*?[^0-9a-zA-Z]).{6}
      

      所以如果你要添加提到的附加条件,它会是这样的:

      ^(?=.*?[^0-9a-zA-Z])(?=.*?[0-9]).{6}
      

      如您所见,这种模式很容易扩展。请注意,它仅用于检查匹配项,它的捕获没有用。

      【讨论】:

        【解决方案3】:

        保持轻松。

        // long enough  and  contains something not digit or a-z
        x.Length >= 6   &&   Regex.IsMatch(x, @"[^\da-zA-Z]")
        

        编码愉快。

        编辑,纯“正则表达式”:

        这首先断言在预读中有 6 个字母,然后确保在预读中存在非字母数字的内容(它将“丢弃”前 5 个字符匹配)。

        (?=.{6}).{0,5}[^\da-zA-Z]
        

        【讨论】:

        • 我将正则表达式保存在配置文件中,我不能这样做。
        • @Lucero 再次检查。该输入不会失败。它通过正则表达式,如要求中所述——“字符串的最小长度为 6,并且至少包含一个非字母数字字符”。在这种情况下,“-”满足第二个要求,以及第一个要求的长度。顺便说一句,你的答案很好的逆转。
        • @Lucero 由于第二个“。”,我没有锚就逃脱了。匹配限制。
        • 抱歉,您当然是对的。我不知何故错过了省略的锚,我的错。为此+1。 ;-)
        【解决方案4】:

        那怎么办(固定):^(?=.{6})(.*[^\w].*)$

        看看http://www.ultrapico.com/Expresso.htm这是一个很酷的工具,可以帮助你学习正则表达式。

        【讨论】:

        • 看起来好像表达式被某种方式破坏了(我希望在它们各自的位置看到一些 .*\w 以使表达式有意义)。
        • 您在一次编辑中删除了反斜杠。 [^w] 应该是 [^\w]\W
        猜你喜欢
        • 2013-11-18
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多