DataAnnotations RegularExpression - 禁止URL

时间:2015-11-16 22:46:41

标签: regex asp.net-mvc data-annotations

我试图在ASP.NET MVC中创建一个DataAnnotation正则表达式,它将捕获和禁止用户输入的URL。基本上,我想捕获任何以http://或https://开头的字符串,但我对正则表达式的了解很少。我可以使用以下正则表达式代码匹配包含这些字符串的字符串:

^(HTTP:// | HTTPS://)

但我不知道如何否定它,所以,在我的模型中,

    [RegularExpression(@"^(http:\/\/|https:\/\/)", ErrorMessage = "Entry should not contain url.")]
如果在字符串的开头找到http://或https://,则

返回Model错误。

我发现了以下内容:

[正则表达式(@&#34; ^((HTTPS:?!????。//)([\ DA-z.-] +)([AZ] {2,6-} )([/ \ w .-] /?)。 $&#34;,ErrorMessage =&#34;条目不应包含网址。&#34;)] < / p>

可以捕获网址,但它不允许字符串中的句点

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

你需要在开头使用一个负向前瞻:

@"^(?!https?://).*$"

如果不需要完整的字符串匹配,则执行以下操作:

@"^(?!https?://)"

这是the regex demo

请注意,@"^(?!https?://)"包含在(?!https?://)(字符串的开头)之后的负向前瞻^。因此,它只是检查 - 正好在字符串的开头 - 如果字符串不是以http://https://开头(由于?后面的s量词集,我们可以匹配两种选择)。

您“找到”的正则表达式 - ^(?!.*?(https?://)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*/?).*$ - 包含更复杂的前瞻限制。你可以read what it is doing at regex101.com。句点出现问题的原因是字符类中的句点和\. - 如果键入2个句点然后输入逗号,则这将使限制无效。它可以用作正则表达式,检查字符串是否不应包含URL,您需要检查它是否不以https?://开头。