我有 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 的长度是 12 而 PT 编码长度必须为 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
后跟1
、4
或6
(?=.{10}$)
- 正向前瞻,要求紧靠当前位置右侧的任意 10 个字符(使用 10 是因为FG
或01
已经占用了 2 个字符,总共 12 个)|
- 或者(?:05|[pP][Tt])
-05
,pt
,Pt
,pT
或PT
(?=.{11}$)
- 正向前瞻,需要紧邻当前位置右侧的任意 11 个字符
)
- 交替组结束[0-9]*
- 0+ 位(?:[Ff][rR])?
- 可选序列(1 次或 0 次)、fr
、Fr
、fR
或FR
$
- 字符串结尾。
现在,添加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/