DataAnnotations RegularExpression - 禁止 URL

DataAnnotations RegularExpression - disallow URLs

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

^(http://|https://)

但我不知道如何取反,所以在我的模型中,

    [RegularExpression(@"^(http:\/\/|https:\/\/)", ErrorMessage = "Entry should not contain url.")]

returns 如果在字符串的开头找到 http:// 或 https://,则会出现模型错误。

我找到了以下内容:

[正则表达式(@"^(?!.?(https?://)?([\da-z.-]+).([a-z.]{2,6 })([/\w .-])/?).$", ErrorMessage = "Entry should not contain url.")]

它捕获 URL,但不允许字符串中包含句点

有什么想法吗?

谢谢!

您需要使用锚定在开头的否定前瞻:

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

如果不需要完整的字符串匹配,可以这样做:

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

这里是the regex demo.

请注意,@"^(?!https?://)" 包含紧跟在 ^(字符串的开头)之后的否定先行 (?!https?://)。因此,它只是检查 - 就在字符串的开头 - 如果字符串不是以 http://https:// 开头(由于在 s 之后设置了 ? 量词,我们可以匹配两种选择)。

您 "found" - ^(?!.*?(https?://)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*/?).*$ - 的正则表达式包含更复杂的先行限制。你可以read what it is doing at regex101.com。句点问题是由于字符 class 和 \. 中的句点引起的 - 如果您输入 2 个句点,然后输入一个逗号,这将使限制失效。它可以用作正则表达式检查字符串不应包含 URL,您需要检查它是否不以 https?://.

开头