我正在使用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; }
但是在数据形式字段中,如果在 http:// 或 https:// 或 \\ 之后有任何文字消失,则会出错
http://google.com ---failed
https://aa --failed
\\a ----failed
我只是想通过以上所有方案...在高级别上,正则表达式只应检查输入的文本是否已开始与http://
或https://
或{ {1}}
甚至当用户输入和删除文本并单击选项卡时,数据形式也会为该字段引发错误。错误是 URL是必填字段,但我没有提到此属性的必需属性。 请帮忙
答案 0 :(得分:1)
您正在使用文字字符串,但您正试图逃避它。
[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://不必转义。分隔符后面的指令(即本例中的i)只是告诉做一个不区分大小写的匹配
我曾经测试过一些例子:
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://google.com: True
https://aa: True
\\a: True
\\\a: False
答案 1 :(得分:0)
他们没有让我失望。我用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有一个添加魔术引号的功能....
答案 2 :(得分:0)
您可以在library中找到很多正则表达式。 例如:for your task。