regex Fluentvalidation6.4.1.0支持我使用不正确的正则表达式

vfh0ocws  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(100)

在我的情况下,我想验证的网址图像,一些网址是有效的,但结果是错误的。链接图像为“https://fuvitech.online/wpcontent/uploads/2021/02/bta16600brg.jpg“或“https://fuvitech.online/wp-content/uploads/2021/02/bta16-600brg.jpg“,则响应”图像链接的格式不正确”。
我的代码:

RuleFor(product => product.Images)
            .Length(1, 3000).WithMessage(Labels.importProduct_ExceedDescription, p => ImportHelpers.GetColumnName(typeof(ProductEntity).GetProperty(nameof(p.Images))))
            .Matches(@"^(http:\/\/|https:\/\/){1}?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$").WithMessage(Labels.importProduct_UrlNotCorrect, p => ImportHelpers.GetColumnName(typeof(ProductEntity).GetProperty(nameof(p.Images))));

请帮助我上面的正则表达式哪里错了。谢谢。

djp7away

djp7away1#

试试这个:

    • 注意**以下正则表达式模式可能会触发误报,也可能会忽略有效的图像URL,因为很难验证给定的URL是否有效。
^https?:\/\/(?:(?:[A-Za-z0-9]+(?:-[A-Za-z0-9]+)+|[A-Za-z0-9]{2,})\.)+[A-Za-z]{2,}(?::\d+)?\/(?:(?:[A-Za-z0-9]+(?:(?:-[A-Za-z0-9]+)+)?\/)+|)[\w-]+\.(?:jpg|jpeg|png)$
  • 说明 *
  • ^行/字符串的开头。
  • https?:\/\/http与可选字母s匹配,后面跟://
  • (?:(?:[A-Za-z0-9]+(?:-[A-Za-z0-9]+)+|[A-Za-z0-9]{2,})\.)+这将匹配foo-foo.bar-bar.foo.bar-bar.foo.等内容
  • [A-Za-z]{2,}这将匹配TLD部分,例如comorg,此部分与前一部分将匹配foo-foo.bar-bar.comfoo.bar-bar.comfoo.com等内容。
  • (?::\d+)?端口部分的可选组(冒号:后跟一个或多个数字)。
  • \/(?:(?:[A-Za-z0-9]+(?:(?:-[A-Za-z0-9]+)+)?\/)+|)这个检查两件事,第一件是/uploads/public-images//uploads/images/,第二件是单个/
  • [\w-]+此部分用于文件名,例如bta16-600brg
  • \.(?:jpg|jpeg|png)您可以在此处添加多个扩展名,您可以允许使用大写字母,例如,[Jj][Pp][Gg]代表jpg
  • $行/字符串的结尾。

参见regex demo

tmb3ates

tmb3ates2#

谢谢@SaSkY回答我的问题。我发现了我的错误。此源[.[a-z]{2,5}]只允许2-5个字符的域名扩展名。示例[.com]有效。但在我的情况下[.online]无效。我更改为[.[a-z]{1,10}]。

相关问题