【问题标题】:Regex Directory Name Validation [closed]正则表达式目录名称验证[关闭]
【发布时间】:2013-07-22 16:36:54
【问题描述】:

我想检查一个文本框是否有一个有效的目录名。因为我会用这个文本框的值创建一个目录。

另外,值必须至少有 3 个字符,不能超过 20 个字符。

我该怎么做?

【问题讨论】:

  • 我会检查路径的长度,只需尝试创建它,看看它是否会引发错误。

标签: c# regex vb.net


【解决方案1】:

Path.GetInvalidPathChars 是您可以找出哪些字符无效的地方。我建议您不要使用正则表达式,而是使用Path.GetFullPath,因为这将为您验证路径:它总是会比您尝试自己滚动的任何事情做得更好,并且会随着规则的变化而保持最新时间。

至于它的长度,使用Path类的方法来获取你要检查的路径的组成部分。

【讨论】:

    【解决方案2】:

    不需要RegEx,太浪费了。

    public bool ValidName(string dirName)
    {
        char[] reserved = Path.GetInvalidFileNameChars();
    
        if (dirName.Length < 3)
             return false;
        if (dirName > 20)
             return false;
    
        foreach (char c in reserved)
        {
             if (dirName.Contains(c))
                 return false;
        }
    
        return true;
    }
    

    RegEx 不是特别有效,在这里也不是必需的。只需检查边界,然后确保字符串不包含任何保留字符,一旦发现错误就会返回 false。

    【讨论】:

    • 最好使用 Path.GetInvalidPathChars() 而不是硬编码值。
    • 路径中允许//this/is/valid。禁止字符列表取决于操作系统。
    • @the_lotus 不太好用,因为路径中不允许的字符是名称中不允许的字符的子集...例如,您可以输入不应该的“dir/name”通过验证。
    • @evanmcdonnal,Path 类有另一种处理无效名称字符的方法:GetInvalidFileNameChars
    • @PaulRuane 好的,正在编辑。
    【解决方案3】:

    简单

    这是你应该使用的正则表达式。

    ^[0-9A-Za-Z_-]{3,20}$
    
    "^"means starts with the characters defined in [] brackets
    "[]" represents list of allowed characters
    "0-9" represents that numbers from 0-9 can be used
    "A-Z" uppercase letters from A to Z
    "a-z" lowercase letters from a to z
    "_" underscore
    "-" dash
    "{}" represents limitations
    "{3,20}" - min 3 characters max 20
    "$" ends with the characters defined in []
    

    如果你不使用 ^$ ,它将在字符串中搜索这些字母的组合,因此字符串可以是 30 个字符并且它是有效的。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      相关资源
      最近更新 更多