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

时间:2013-08-07 14:00:35

标签: 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://或{ {1}}

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

3 个答案:

答案 0 :(得分:1)

您正在使用文字字符串,但您正试图逃避它。

[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,所有preg_xxx方法的PHP)中,必须设置分隔符。在这种语言中,正则表达式将以分隔符开头,分隔符是显示正则表达式模式的开始和结束的符号,即

/^(http[s]?:\/\/... /i第一个/是分隔符,这就是为什么//必须要从http://转义。

#^(http[s]?://... #i第一个#现在是分隔符,这就是为什么//来自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

答案 1 :(得分:0)

他们没有让我失望。我用RegEx.IsMatch()检查了它。

但是如果你想在开头检查一个双\ \你的正则表达式应该是^(http [s] {0,1}:// | \\)

你可以尝试

^(http[s]?://|\\\\) 

实际上等于你的正则表达式。

当您希望正则表达式对资本不敏感时使用:

(?i)^(http[s]?://|\\\\)

(?i)^(http[s]?://|\\\\).+$

增加:

我在我的MVC 4应用程序中尝试了这个并且它可以工作:

    /// <summary>
    /// Gets or sets the website.
    /// </summary>
    [RegularExpression(@"(?i)^(http[s]?://|\\\\).+$", ErrorMessage = "Not good website")]
    public string Website { get; set; }

你的输入是不是以某种方式被破坏了。我知道PHP有一个添加魔术引号的功能....

答案 2 :(得分:0)

您可以在library中找到很多正则表达式。 例如:for your task