代码之家  ›  专栏  ›  技术社区  ›  Oren A

这个正则表达式允许“*”吗?

  •  2
  • Oren A  · 技术社区  · 14 年前

    我对regex的了解真的很少。
    我正在测试密码验证。

    下面是描述它的regex(我没有写它,也不知道它是什么意思):

    private static string passwordField = "[^A-Za-z0-9_.\\-!@#$%^&*()=+;:'\"|~`<>?\\/{}]";  
    

    dfgbrk* “,我的代码,使用上面的正则表达式,允许这样做。

    你能给我一个用上面的正则表达式验证不允许的字符串的例子吗?

    补充: 下面是原始代码如何使用这个regex(它在那里工作):

    public static bool ValidateTextExp(string regexp, string sText)
                {
                    if ( sText == null)
                    {
                        Log.WriteWarning("ValidateTextExp got null text to validate against regExp {0} . returning false",regexp);
                        return false;
                    }
    
                    return (!Regex.IsMatch(sText, regexp));
                }
    

    我好像做错了什么。。

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  8
  •   Andrew Barber Tejas Tank    14 年前

    正则表达式匹配的值包含 在名单上。

    您的测试值匹配,因为 里面有空间

    原因是 not ^ . 它匹配任何包含任何单个字符的值的原因不是因为您没有指定字符串的开头或结尾或任何限定符。

    以上假设我没有遗漏角色汤中间任何角色的重要性:)


    如果您的目的是让Regex字符串表示密码中实际允许的唯一字符,那么您可以这样更改Regex:

    string pattern = "^[A-Z0-9...etc...]+$";
    

    重要的部分有:

    • 这个 ^ 从括号内移到括号外;表示整个字符串的开始。
    • 这个 $ 已添加到结尾,表示整个字符串的结尾。
    • 最后,我添加了 + 量词,意思是你想找到任何一个有效的字符, . (此regex不允许0长度的密码)

    ^ [ . 例如:

    string pattern = "^[A-Z0-9^...etc...]+$";
    

    这个 在正则表达式中,在不同的时间、不同的位置有特殊的含义。

        2
  •  5
  •   Joel Coehoorn    14 年前
    [^A-Za-z0-9_.\-!@#$%^&*()=+;:'\"|~`?\/{}]
    ----------------------^

    在我看来很好,至少在你的题目上。我还不清楚你样品中的空间为什么没有弄错。

    bool isGoodPassword = !Regex.IsMatch(@"[^A-Za-z0-9_.\-!...]", requestedPassword);
    

    您可以重新编写此文件以获得正匹配(不带否定),如下所示:

    bool isGoodPassword = Regex.IsMatch(@"^[A-Za-z0-9_.\-!...]+$", requestedPassword);
    

        3
  •  4
  •   Gumbo    14 年前

    正则表达式只是一个反转字符类,只描述一个字符(但不能 *

        4
  •  2
  •   bitmask    14 年前

    取决于你如何运用它。它只描述了一个字符 ^ 一开始我有点烦,因为它禁止任何其他字符,所以可能有可怕的鱼那里。

    编辑:正如在其他答案中指出的,字符串匹配的原因是空格,而不是被这一行替换的解释。