使用正则表达式设置文本字段的长度



我目前正在尝试使用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; }

最新更新