ASP-NET:数据注释正则表达式不起作用

asp-net: data-annotation regex DOESN'T WORK

提问人:Ignorant Necromancer 提问时间:9/28/2022 更新时间:9/28/2022 访问量:245

问:

ASP-NET MVC 项目

enter image description here

我尝试将常规环绕表达式设置为表单的密码字段。我尝试过的一个简单的例子是检查用户是否使用 System.ComponentModel.DataAnnotations 写了一个大写字母。


例子:

  • [RegularExpression(“(?=.*[A-Z])”, ErrorMessage = “你必须写 大写字母“)]

enter image description here

  • [RegularExpression(@“^(?=.*[A-Z])”, ErrorMessage = “你必须 写一个大写字母“)]enter image description here

我在这个网页中证明了这个正则表达式:http://regexstorm.net/tester 我认为这个赞助人是正确的。

在登录视图中,我使用指令 [email protected] 来检查模型是否正确,如果不是,服务器会在视图中打印错误消息,这总是会发生。

MICROSOFT指南:https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference#lookarounds-at-a-glance

asp.net-mvc 表单 验证 正则表达式环视

评论


答:

0赞 Wiktor Stribiżew 9/28/2022 #1

您必须提供一个模式,该模式在使用正则表达式时使用整个字符串(请参阅 RegularExpression Validation 属性无法正常工作)。您的正则表达式模式仅与字符串位置的开头匹配,因为是断言字符串开始位置的锚点,并且 是正向展望,一种非消费模式,如果除换行符字符以外的零个或多个字符,则返回“true”尽可能多的字符,然后是 ASCII 大写字母。RegularExpressionAttribute^(?=.*[A-Z])^(?=.*[A-Z])

你可以使用

[RegularExpression(@"^.*[A-Z].*", ErrorMessage = "You have to write a capital letter")]

或者,一个更有效的

[RegularExpression(@"^[^A-Z]*[A-Z].*", ErrorMessage = "You have to write a capital letter")]

如果输入文本中可能有换行符,请替换为:.[\w\W]

[RegularExpression(@"^[^A-Z]*[A-Z][\w\W]*", ErrorMessage = "You have to write a capital letter")]

细节

  • ^- 字符串的开头
  • [^A-Z]*- 除 ASCII 大写字母以外的零个或多个字符
  • [A-Z]- 大写字母
  • [\w\W]*- 尽可能多地使用零个或多个字符。