如何使用.net mvc 4中的正则表达式验证用逗号分隔的多个URL

时间:2017-02-16 11:47:14

标签: .net regex model-view-controller annotations

我已尝试使用以下Regex来验证多个网址,但它无法正常工作。

[Required]
[DisplayName("Top Post Url")]
[DataType(DataType.Url)]
[RegularExpression(@"(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-          
9+&@#/%=~_|]", ErrorMessage = "Invalid Url")]

public string PostsUrl { get; set; }

1 个答案:

答案 0 :(得分:0)

您不必使用单个正则表达式。 我不知道如何在C#中编码,但我可以提供伪代码。

String urls = "url1,url2";
Regex validUrlRegex = /^(https?:\/\/)?[a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+$/;
Array urlsArray = urls.split(',');
Boolean allUrlsArevalid = true;
for(int i=0; i < urlsArray; i++) {
 if(!urls.match(validUrlRegex)) {
   allUrlsArevalid = false;
   break;
 }
}

print allUrlsArevalid;

如果您正在寻找单一的正则表达式。然后

Regex validUrlRegex = "/((?:https?:\/\/)?[a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+)/";
Regex desiredRegex = validUrlRegex + "(?:(?:,)" + validUrlRegex + ")*";
urls.match(desiredRegex);

解释

这是一个简化的格式字符串

“{} validUrlRegex(?:(?:,){validUrlRegex})*”

(?:)不是非捕获括号。即,其中的任何内容都不会存储在结果数组中。

(?:(?:,){validUrlRegex})*这将匹配,someUrl的零次或多次出现。