在我的情况下,我想验证的网址图像,一些网址是有效的,但结果是错误的。链接图像为“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))));
请帮助我上面的正则表达式哪里错了。谢谢。
2条答案
按热度按时间djp7away1#
试试这个:
^
行/字符串的开头。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部分,例如com
、org
,此部分与前一部分将匹配foo-foo.bar-bar.com
、foo.bar-bar.com
或foo.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
tmb3ates2#
谢谢@SaSkY回答我的问题。我发现了我的错误。此源[.[a-z]{2,5}]只允许2-5个字符的域名扩展名。示例[.com]有效。但在我的情况下[.online]无效。我更改为[.[a-z]{1,10}]。