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

本文关键字:路径 正则表达式 共享文件 检查 url 用于 | 更新日期: 2023-09-27 18:26:47

我在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是必填字段,但我没有提到该属性的必填属性。请帮助

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

您正在使用一个文本字符串,但您正在尝试对其进行转义。

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

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

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

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

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

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

/^(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

您可以在库中找到许多正则表达式。例如:针对您的任务。

它们对我来说没有失败。我用RegEx.IsMatch().检查过

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

你可以试试

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

这实际上等于你的Regex。

当您希望正则表达式不区分大写时,请使用:

(?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有一个添加神奇引号的功能。。。。