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

标签 c# regex silverlight-4.0

我在 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/

相关文章:

c# - C# 中的指针递增和链接优先级

c# - .Net 单例属性的延迟初始化

c# - 线程比任务运行得更快吗?

ruby-on-rails - 正则表达式检查数字小数点分隔符是否一致

Python:匹配并替换每行开头的所有空格

silverlight - 带有 ObservableCollections 的 ObservableCollection 无法正确呈现

c# - 整理 if 语句

javascript - 用正则表达式解析jsdoc风格的注释

Silverlight 滚动动画占用大量 CPU 时间

c# - 在 C# Com 包装器中使用 native dll 并在 silverlight 中使用 dll