[英]Regular expression to check url and shared file path
我正在使用Dataform字段的正则表达式下面检查输入的文本是以http://
或https://
还是\\\\
开头
我正在使用System.componentmodel.DataAnnotations.RegularExpressionAttribute
[Display(Name = "URL", Description = "URL")]
[RegularExpression(@"^(http[s]{0,1}:\/\/|\\\\)",
ErrorMessage = "Please enter valid Url or filepath")]
public string URL { get; set; }
但是在dataform字段中,如果在http://或https://或\\\\之后存在任何文本,则会抛出错误
http://google.com ---failed
https://aa --failed
\\a ----failed
我只想传递上述所有场景......在高级别上,正则表达式应仅检查输入的文本是以http://
或https://
还是\\\\
开头
甚至当用户输入和删除文本并单击选项卡时,数据形式也会为该字段抛出错误。错误是URL是必填字段 ,但我没有提到此属性的必需属性。 请帮忙
您正在使用文字字符串,但您正试图逃避它。
[RegularExpression(@"^(http[s]{0,1}:\/\/|\\\\)",
文字字符串以@"..."
开头,不需要转义。 所以要么使用
[RegularExpression("^(http[s]{0,1}://|[\\\\]{2})(?:[\\w][\\w.-]?)",
要么
[RegularExpression(@"^(http[s]{0,1}://|[\\]{2})(?:[\w][\w.-]?)",
更新:您还可以在MSDN上阅读有关字符串文字的更多信息: String Literals
更新2:这是一个常见错误,并且/不必在C#中进行转义,它是perl语法。 在perl(以及使用perl regex estension,所有preg_xxx方法的PHP)中,必须设置分隔符。 在这种语言中,正则表达式将以分隔符开始,分隔符是显示正则表达式模式的开始和结束的符号,即
/^(http[s]?:\\/\\/... /i
第一个/是分隔符,这就是为什么//来自http://必须进行转义。
#^(http[s]?://... #i
第一个#现在是分隔符,这就是为什么//从http://不必转义。分隔符后的指令(即我在这种情况)只是告诉做一个不区分大小写的匹配
我用来测试它的一些例子:
string[] inputs = { @"http://google.com", @"https://aa", @"\\a", @"\\\a" };
Regex regEx = new Regex(@"^(http[s]{0,1}://|[\\]{2})(?:[\w][\w.-]?)+", RegexOptions.Compiled);
foreach(var input in inputs) {
var match = regEx.Match(input);
Console.WriteLine(string.Format("{0}:\t{1} => {2}", input, match.Success, match.Success?match.Groups[1].Value:string.Empty));
}
最后的(?:[\\w][\\w.-]?)+
是为了确保一个单词后跟一个单词,即\\\\ a应该无效, http://.somedomain.com
也不应该http://.somedomain.com
结果:
http://google.com: True
https://aa: True
\\a: True
\\\a: False
他们没有为我失败。 我用RegEx.IsMatch()检查了它。
但是如果你想在开头检查一个双\\ \\你的正则表达式应该是^(http [s] {0,1}:// | \\\\)
你可以试试
^(http[s]?://|\\\\)
这实际上等于你的正则表达式。
当您希望正则表达式对资本不敏感时使用:
(?i)^(http[s]?://|\\\\)
要么
(?i)^(http[s]?://|\\\\).+$
加成:
我在我的MVC 4应用程序中尝试了这个并且它可以工作:
/// <summary>
/// Gets or sets the website.
/// </summary>
[RegularExpression(@"(?i)^(http[s]?://|\\\\).+$", ErrorMessage = "Not good website")]
public string Website { get; set; }
不是你的输入不知何故。 我知道PHP有一个添加魔术引号的功能....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.