【问题标题】:Regex is not working in RegularExpression Annotation正则表达式在正则表达式注释中不起作用
【发布时间】:2020-07-08 06:26:22
【问题描述】:

我在 ViewModel 中使用 RegularExpression 注释应用了客户端验证。

验证是 GroupName 应该以 TPDC_ 或 DMK_ 开头并至少再加一个字母

[Required(ErrorMessage = "Group Name is required")]
        [RegularExpression("^(TPDC_|DMK_)+", ErrorMessage = "Group Name should begin with TPDC_ or DMK_")]
        public string GroupName { get; set; }

但是使用的正则表达式没有按预期工作。

【问题讨论】:

    标签: .net regex asp.net-mvc


    【解决方案1】:

    您无需使用交替重复该组。如果您希望以下字母为 A-Z,则可以在其后添加一个字符类。关闭组后,下划线可能会移到。

    ^(?:TPDC|DMK)_[A-Z]
    

    说明

    • ^ 字符串开始
    • (?:非捕获组
      • TPDC|DMK匹配TPDC或DMK
    • )关闭群
    • _[A-Z] 匹配下划线后跟字符 A-Z

    Regex demo

    或者,如果您想允许来自任何语言的任何字母,您可以改用 \p{L}

    ^(?:TPDC|DMK)_\p{L}
    

    【讨论】:

      【解决方案2】:

      如果您打算匹配以TPDC 或DMK 开头的字符串,然后是_ 后跟一个或多个字母,您可以考虑使用

      ^(TPDC|DMK)_[A-Za-z]+$
      

      或者,如果_之后可能有任何字符,但需要在某处出现一个字母,你可以使用

      ^(TPDC|DMK)_[^A-Za-z]*[A-Za-z].*
      

      请参阅 regex demo #1 和 regex demo #2。

      详情

      • ^ - 字符串开头
      • (TPDC|DMK) - TPDC 或 DMK
      • _ - 下划线
      • [A-Za-z]+ - 1+ ASCII 字母(\p{L}+ 只能在服务器端工作!)
      • [^A-Za-z]*[A-Za-z].* - 除 ASCII 字母外的任何 0 个或多个字符(\P{L}* 是 [^A-Za-z]* 的 Unicode 等价物,只能在服务器端使用),一个 ASCII 字母,然后是除换行符之外的任何 0 个或多个字符字符,尽可能多。
      • $ - 字符串结束。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-26
        • 2014-12-17
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2013-07-30
        相关资源
        最近更新 更多