我目前正在尝试使用RegularExpression属性来阻止用户输入html标记。这确实有效,并显示错误消息。我现在正试图让这个RegEx对添加到文本框中的字符数量设置限制。这是正则表达式:
[RegularExpression(@"[^<>]{1,10}$*", ErrorMessage = "NOO")]
public string Name { get; set; }
我对RegularExpressions很陌生,也不太了解它的布局和工作原理。我本以为{}中的值会设置最小和最大长度,但它不起作用,而检查是否<>已输入仍在工作。如何布局正则表达式,这个RegEx有什么问题?
我使用的是ASP.NET MVC 5 C#。
提前感谢
查看正则表达式[^<>]{1,10}$*
,$
后面的星号有点奇怪,因为它表示"任意数量的行尾"。
当将其与输入进行匹配时,我会将其解释为"最后1到10个字符中不包含<
或>
的任何字符"。
如果你想限制字符串的全长,你应该描述"输入开始"one_answers"输入结束"之间的所有内容,所以最好在正则表达式的开头添加一个^
:
^([^<>]){1,10}$
[RegularExpression(@"([^<>]{1,10}$*)[0,30]", ErrorMessage = "NOO")]
public string Name { get; set; }
[0.30]定义了可以输入的最小和最大字符数。
这里是学习正则表达式的好地方:http://www.regular-expressions.info/tutorial.html
正则表达式的奇怪之处在于,$符号后面有*。$符号表示匹配字符串的末尾应该在那里,而*表示重复(0或更多)。因此,检查零个或多个字符串结尾可能会混淆问题。
除此之外,寻找1到10个不是<或>似乎有效。所以我认为是$后面的*让你失望了。
尝试这个
[RegularExpression(@"^.{6,10}$", ErrorMessage = "Name should be of minimum 6 and maximum 10 characters")]
public string Name { get; set; }