我已尝试使用以下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; }
答案 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
的零次或多次出现。