我试图在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>
可以捕获网址,但它不允许字符串中的句点
有什么想法吗?
谢谢!
答案 0 :(得分:2)
你需要在开头使用一个负向前瞻:
@"^(?!https?://).*$"
如果不需要完整的字符串匹配,则执行以下操作:
@"^(?!https?://)"
请注意,@"^(?!https?://)"
包含在(?!https?://)
(字符串的开头)之后的负向前瞻^
。因此,它只是检查 - 正好在字符串的开头 - 如果字符串不是以http://
或https://
开头(由于?
后面的s
量词集,我们可以匹配两种选择)。
您“找到”的正则表达式 - ^(?!.*?(https?://)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*/?).*$
- 包含更复杂的前瞻限制。你可以read what it is doing at regex101.com。句点出现问题的原因是字符类中的句点和\.
- 如果键入2个句点然后输入逗号,则这将使限制无效。它可以用作正则表达式,检查字符串是否不应包含URL,您需要检查它是否不以https?://
开头。