【问题标题】:Regex With Asp.net Mvc StringLength Attribute带有 Asp.net Mvc StringLength 属性的正则表达式
【发布时间】:2018-02-05 12:25:45
【问题描述】:

我有 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,06PT 编码时长度为 12长度必须为 13。通常用户使用 PT 代码 90%.. 有时他们会插入 12 长度的 PT 代码及其错误。 我可以同时有 2 个正则表达式吗?我可以验证正则表达式中特定代码的长度吗?我认为 [StringLength(13,ErrorMessage="Allowed 13 or 12 } 属性不是我需要的......

【问题讨论】:

  • 您不能有 2 个 [RegularExpression] 属性,但您可以有一个正则表达式,它允许包含 FG 的条形码包含 12 个字符,而包含 PT 的条形码包含 13 个字符(使用 @ 987654327@),并删除[StringLength]属性
  • 尝试something like this,但请注意末尾的FR 是可选的,此处不计入。
  • big thnx Wiktor Stribiżew - 一切正常,但是,如果我的代码以三个符号开头,如 KLM07489869FR - 长度 13,我如何将它添加到您的正则表达式中?我们将添加这个code later.ofc 我正在自己尝试,但我不想弄乱你所有的好东西。
  • 让我发帖,我会解释的。

标签: c# regex asp.net-mvc


【解决方案1】:

你可以使用

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

请参阅regex demo

解释

  • ^ - 字符串开头
  • (?: - 非捕获交替组的开始
    • (?:[Ff][gG]|0[146]) - fgFgfGFG 序列或 0 后跟 146
    • (?=.{10}$) - 一个正向前瞻,需要在当前位置右侧再增加 10 个字符(使用 10 个是因为 FG01 已经占用 2 个字符,总共 12 个)
    • | - 或
    • (?:05|[pP][Tt]) - 05ptPtpTPT
    • (?=.{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])?$
                       ^^^^^^^^^^^^

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2012-12-08
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多