我有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不是我需要的...
答案 0 :(得分:1)
您可以使用
^(?:(?:[Ff][gG]|0[146])(?=.{10}$)|(?:05|[pP][Tt])(?=.{11}$))[0-9]*(?:[Ff][rR])?$
请参阅regex demo。
<强>解释强>:
^
- 字符串开头(?:
- 开始非捕获交替组
(?:[Ff][gG]|0[146])
- fg
,Fg
,fG
或FG
序列或0
后跟1
,{ {1}}或4
6
- 一个积极的前瞻,需要在当前位置右侧立即再增加10个字符(使用10个因为(?=.{10}$)
或FG
已经占用2个字符,共计12个字符)01
- 或|
- (?:05|[pP][Tt])
,05
,pt
,Pt
或pT
PT
- 一个积极的前瞻,需要在当前位置右侧立即增加11个字符(?=.{11}$)
- 交替小组结束)
- 0+位数[0-9]*
- 可选序列(1或0次),(?:[Ff][rR])?
,fr
,Fr
或fR
FR
- 字符串结束。现在,添加$
格式支持(KLM07489869FR
长度为3个字符,因此其余部分必须为10个,因此我们将KLM
匹配部分放置在KLM
的备用部分中}):
(?=.{10}$)