gpt4 book ai didi

c# - 用于检查 url 和共享文件路径的正则表达式

转载 作者:行者123 更新时间:2023-11-30 17:52:47 24 4
gpt4 key购买 nike

我在 Dataform 字段中使用以下正则表达式来检查输入的文本是否以 http://https://\\

我正在使用 System.componentmodel.DataAnnotations.RegularExpressionAttribute

 [Display(Name = "URL", Description = "URL")]
[RegularExpression(@"^(http[s]{0,1}:\/\/|\\\\)",
ErrorMessage = "Please enter valid Url or filepath")]
public string URL { get; set; }

但在数据表单字段中,如果在 http://https://\\ 之后输入任何文本,则会引发错误

http://google.com     ---failed
https://aa --failed
\\a ----failed

我只想通过所有上述场景......在高层次上,正则表达式应该只检查输入的文本是否开始 http://https://\\

当用户输入和删除文本并单击选项卡时,甚至数据表单也会为该字段抛出错误。错误是URL 是必填字段,但我没有提到此属性的必填属性.请帮忙

最佳答案

您正在使用文字字符串,但您正试图对其进行转义。

[RegularExpression(@"^(http[s]{0,1}:\/\/|\\\\)", 

文字字符串以 @"..." 开头,不需要转义。所以要么使用

[RegularExpression("^(http[s]{0,1}://|[\\\\]{2})(?:[\\w][\\w.-]?)", 

[RegularExpression(@"^(http[s]{0,1}://|[\\]{2})(?:[\w][\w.-]?)", 

更新:您还可以在 MSDN 上阅读有关字符串文字的更多信息:String Literals

更新 2: 这是一个常见错误,并且/也不必在 C# 中转义,它是 perl 语法。在 perl(和使用 perl regex estension 的 PHP,所有 preg_xxx 方法)中,必须设置一个分隔符。在这种语言中,正则表达式将以定界符开头,这是一个显示正则表达式模式开始和结束的符号,即

/^(http[s]?:\/\/.../i 第一个/是定界符,这就是必须转义来自 http://的//的原因。

#^(http[s]?://... #i 第一个 # 现在是定界符,这就是为什么//from http://不必转义的原因. 定界符后的指令(即本例中的 i)只是告诉进行不区分大小写的匹配

一些我用来测试它的例子:

        string[] inputs = { @"http://google.com", @"https://aa", @"\\a", @"\\\a" };
Regex regEx = new Regex(@"^(http[s]{0,1}://|[\\]{2})(?:[\w][\w.-]?)+", RegexOptions.Compiled);
foreach(var input in inputs) {
var match = regEx.Match(input);
Console.WriteLine(string.Format("{0}:\t{1} => {2}", input, match.Success, match.Success?match.Groups[1].Value:string.Empty));
}

最后的 (?:[\w][\w.-]?)+ 是为了确保一个词后面跟着一个词,即\\a 应该'无效,http://.somedomain.com

也不应该

结果:

http://google.com:      True
https://aa: True
\\a: True
\\\a: False

关于c# - 用于检查 url 和共享文件路径的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com