regex - 为什么 MVC 验证对 "<"和 ">"不起作用?

标签 regex asp.net-mvc

我有这个 MVC 应用程序,我希望能够允许用户输入 6 到 255 个字符长的用户名,包括我认为合适的特殊字符。我有一个简单的正则表达式:

[RegularExpression(@"^([a-zA-Z0-9!\@#\$%\^&\(\)-_\+\.'`~/=\?\{\}\|]){6,255}$", ErrorMessageResourceType = typeof(AdminResource), ErrorMessageResourceName = "UserNameFormatError")]

验证在一定程度上起作用。它不会让您输入少于 6 个字符的用户名,也不会让您输入超过 255 个字符的用户名,它还会让您使用我列出的所有特殊字符。有趣的是,它也会让你使用“<”和“>”,我不想让它使用,因为那样你就会开始在后端出现一些错误,因为安全人员认为你正在尝试注入(inject)恶意代码或我们。这不是重点,当它们不包含在正则表达式中时,验证为什么允许使用它们?

最佳答案

破折号似乎是罪魁祸首。除了在组的开头,它会表示一个范围。因此,您允许 )_ 之间的所有内容。您可以逃脱或移动它。

关于regex - 为什么 MVC 验证对 "<"和 ">"不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610211/

相关文章:

php - 在 preg_replace_callback 中获取当前索引?

mysql - 神秘错误1064

.net - Visual Studio 2012 警告 MSB3026 : Could not copy DLL files

jquery - 根据条件为值添加颜色样式

c# - 如何使用明文密码作为oauth登录?

regex - Java8-使用正则表达式从字符串中查找字符串列表

python - 从字符串中排除列表中出现的单词

javascript - 如何从表的outerHTML 值创建列表对象?

regex - 理解(并形成)这个有限自动机的正则表达式

asp.net-mvc - 防止验证 asp.net MVC 3 中的表单的一部分