【发布时间】:2013-07-22 16:36:54
【问题描述】:
我想检查一个文本框是否有一个有效的目录名。因为我会用这个文本框的值创建一个目录。
另外,值必须至少有 3 个字符,不能超过 20 个字符。
我该怎么做?
【问题讨论】:
-
我会检查路径的长度,只需尝试创建它,看看它是否会引发错误。
我想检查一个文本框是否有一个有效的目录名。因为我会用这个文本框的值创建一个目录。
另外,值必须至少有 3 个字符,不能超过 20 个字符。
我该怎么做?
【问题讨论】:
Path.GetInvalidPathChars 是您可以找出哪些字符无效的地方。我建议您不要使用正则表达式,而是使用Path.GetFullPath,因为这将为您验证路径:它总是会比您尝试自己滚动的任何事情做得更好,并且会随着规则的变化而保持最新时间。
至于它的长度,使用Path类的方法来获取你要检查的路径的组成部分。
【讨论】:
不需要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。
【讨论】:
/:/this/is/valid。禁止字符列表取决于操作系统。
Path 类有另一种处理无效名称字符的方法:GetInvalidFileNameChars。
简单
这是你应该使用的正则表达式。
^[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 个字符并且它是有效的。
希望对你有帮助
【讨论】: