c# - 正则表达式与 Asp.net Mvc StringLength 属性

标签 c# regex asp.net-mvc

我有 Asp.net mvc 应用程序,在提交表单上我使用 Regex 和 StringLength 属性来检查字符串。场景是我允许某种代码但它们的长度不同。我的类项目正则表达式和属性在这里:`

[StringLength(13,ErrorMessage="Allowed 13 or 12 Characters",MinimumLength=12)]      
[RegularExpression("^(01|04|05|06|pt|pT|Pt|PT|fg|fG|Fg|FG)[0-9]*(FR|fr|Fr|fR)?$", ErrorMessage = "Entered Format Is Incorrect")]
public string BarCode { get; set; }

问题是 FG,01,04,06 的长度是 12PT 编码长度必须为 13。 ussualy 用户使用 PT 代码 90%.. 有时他们会插入 12 长度的 PT 代码和它的错误。 我可以同时拥有 2 个正则表达式吗?我可以验证正则表达式中特定代码的长度吗?我认为 [StringLength(13,ErrorMessage="Allowed 13 or 12 } atrribute is not what I need here..

最佳答案

你可以使用

^(?:(?:[Ff][gG]|0[146])(?=.{10}$)|(?:05|[pP][Tt])(?=.{11}$))[0-9]*(?:[Ff][rR])?$

参见 regex demo .

解释:

  • ^ - 字符串的开始
  • (?: - 非捕获交替组的开始
    • (?:[Ff][gG]|0[146]) - fg, Fg, fG FG 序列或 0 后跟 146
    • (?=.{10}$) - 正向前瞻,要求紧靠当前位置右侧的任意 10 个字符(使用 10 是因为 FG01 已经占用了 2 个字符,总共 12 个)
    • | - 或者
    • (?:05|[pP][Tt]) - 05, pt, Pt, pTPT
    • (?=.{11}$) - 正向前瞻,需要紧邻当前位置右侧的任意 11 个字符
  • ) - 交替组结束
  • [0-9]* - 0+ 位
  • (?:[Ff][rR])? - 可选序列(1 次或 0 次)、frFrfRFR
  • $ - 字符串结尾。

现在,添加KLM07489869FR格式支持(KLM是3个字符长,因此其余必须是10个,所以我们放置KLM匹配与 (?=.{10}$) 的替代部分:

^(?:(?:[Ff][gG]|0[146]|[Kk][Ll][Mm])(?=.{10}$)|(?:05|[pP][Tt])(?=.{11}$))[0-9]*(?:[Ff][rR])?$
                       ^^^^^^^^^^^^

关于c# - 正则表达式与 Asp.net Mvc StringLength 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622565/

相关文章:

c# - 使用最小起订量验证某些方法的不同参数的多次调用

c# - SQL Server 日期函数

c# - Owin 授权超时后 EF 抛出 AspNetUsers 错误

c# - 从 ASP.NET MVC 中的 View 中的 HTML 字符串下载 PDF

c# - CodeDom ReferencedAssemblies 绝对路径

regex - Haskell中用于正则表达式的"Raw"字符串

java - N个数字的字符串

regex - 从vim中的寄存器中删除换行符?

c# - jQuery ajax 请求导致未找到错误

c# - 在 C# 中根据 ID 删除属性中的 JSON 数据