C# 要匹配路径的正则表达式
我正在尝试验证用户输入的字符串是否为正确的相对路径C# 要匹配路径的正则表达式,c#,asp.net,regex,C#,Asp.net,Regex,我正在尝试验证用户输入的字符串是否为正确的相对路径 它不应该以资产/ 它不应以/ 它不应该以任何文件扩展名结尾,如.html或.php或.jpg 它不应包含点 我正在尝试使用下面的正则表达式,但它不能正常工作 ^([a-z]:)*(\/*(\.*[a-z0-9]+\/)*(\.*[a-z0-9]+)) 我的测试用例 有效路径 示例/您好/图片 示例/您好/视频/用户/数据 测试/123/用户\现场/图像 无效路径 资产/样本/您好/图像 示例/您好/视频/用户/数据/ test/12
- 它不应该以资产/
- 它不应以/
- 它不应该以任何文件扩展名结尾,如.html或.php或.jpg
- 它不应包含点
^([a-z]:)*(\/*(\.*[a-z0-9]+\/)*(\.*[a-z0-9]+))
我的测试用例
有效路径
- 示例/您好/图片
- 示例/您好/视频/用户/数据
- 测试/123/用户\现场/图像
- 资产/样本/您好/图像
- 示例/您好/视频/用户/数据/
- test/123/user_live/images/index.html
- hii/sk.123/data
- 确定/再见/last.exe
- 对于您提到的场景,以下正则表达式应该可以使用:
^((?!(assets\/))(?! )([a-zA-Z0-9_ ]+(?<! )\/(?! ))+[a-zA-Z0-9_ ]+)$
^((?!(资产\/)(?!)([a-zA-Z0-9\+(?)?
除了问题中的场景之外,我还注意到文件夹名称不以空格开头或结尾。这适用于您的测试用例
Regex explained:
^(?!assets/) # It should not start with assets/
[^\.]+ # It should not contain dot (file extensions contain a dot)
(?<!/)$ # It should not end with /
Regex in one line:
^(?!assets/)[^\.]+(?<!/)$
Regex解释:
^(?!assets/)#不应以资产开头/
[^\.]+#不应包含点(文件扩展名包含点)
(?如果还希望匹配下划线,可以将其添加到字符类中。要防止在开始时匹配assets/
,可以使用负前瞻
^(?!assets/)[a-z0-9_]+(?:/[a-z0-9_]+)+$
^
字符串的开头
(?!assets/)
断言直接右边的不是assets/
[a-z0-9\]+
对列出的任何选项重复1+次,包括下划线
(?:/[a-z0-9_]+)+/
重复1+次a/
和1+次所列的任何一个步骤
$
字符串结尾
或者可以使用\w
而不是字符类
^(?!assets/)\w+(?:/\w+)+$
您可以尝试以下正则表达式来实现您的目的:
^(?!assets\/)[^.]*?$(?<!\/\r?$)
您可以在可选的“可读”方法中找到上述代码的示例运行;)
您是否只需要它是一个正则表达式,或者可以使用System.IO.Path的方法?“它不应该包含一个点”,这将足以排除.jpg、.pdf etcpath可以包含比[a-z0-9]更多的字符+<代码> >考虑使用<代码> \W+。为什么这个答案被否决了?请至少提一下原因。我确信回答者可以在回答中提供有效缺陷时纠正这些东西。我没有看到任何BTW.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(?!assets\/)[^.]*?$(?<!\/\r?$)";
string input = @"sample/hello/images
sample/hello_vid/user/data
test/123/user_live/images
assets/sample/hello/images
sample/hello_vid/user/data/
test/123/user_live/images/index.html
hii/sk.123/data
ok/bye/last.exe";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine(m.Value);
}
}
}
public static bool IsValidPath(this string path)
{
if (string.IsNullOrEmpty(path)) return false;
if (path.StartsWith("assets/")) return false;
if (path.EndsWith("/")) return false;
if (path.Contains(".")) return false;
return true;
}
// Usage
var value = "sample/hello/images";
if (value.IsValidPath())
{
// use the value...
}