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

时间:2018-02-05 12:25:45

标签: c# regex asp.net-mvc

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

[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; }

问题是当 PT 代码时,条形码 FG 01,04,06 的长度 12 长度必须 13 。 ussualy用户使用 PT 代码90%.. 有时他们插入 12长度PT 代码及其错误。 我可以同时使用2个正则表达式吗?我可以验证正则表达式中特定代码的长度吗?。我认为[StringLength(13,ErrorMessage ="允许13或12} atrribute不是我需要的...

1 个答案:

答案 0 :(得分:1)

您可以使用

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

请参阅regex demo

<强>解释

  • ^ - 字符串开头
  • (?: - 开始非捕获交替组
    • (?:[Ff][gG]|0[146]) - fgFgfGFG序列或0后跟1,{ {1}}或4
    • 6 - 一个积极的前瞻,需要在当前位置右侧立即再增加10个字符(使用10个因为(?=.{10}$)FG已经占用2个字符,共计12个字符)
    • 01 - 或
    • | - (?:05|[pP][Tt])05ptPtpT
    • PT - 一个积极的前瞻,需要在当前位置右侧立即增加11个字符
  • (?=.{11}$) - 交替小组结束
  • ) - 0+位数
  • [0-9]* - 可选序列(1或0次),(?:[Ff][rR])?frFrfR
  • FR - 字符串结束。

现在,添加$格式支持(KLM07489869FR长度为3个字符,因此其余部分必须为10个,因此我们将KLM匹配部分放置在KLM的备用部分中}):

(?=.{10}$)