从正则表达式对象

时间:2016-08-18 15:36:18

标签: c# regex

一旦加载到C#Regex对象中,是否可以从正则表达式模式中提取允许字符串的最大长度?

如果我将正则表达式字符串定义为@"^[A-Z0-9]{0,20}$",我可以使用字符串操作来获得20的最大允许长度。

但有一种方法可以让我更轻松地获得,例如通过Regex对象,如下所示:

var r = new Regex(@"^[A-Z0-9]{0,20}$");
// var max = r.MaxLength;

更新

要设置一些上下文,我有一个Asp.Net MVC 5应用程序,我们在其中使用RegexValidationAttribute为视图模型提供输入验证。

我想要做的是覆盖该属性,以便我可以添加一个Custom元数据属性,该属性包含从正则表达式字符串解析的字符串的最大允许长度。在我的字符串编辑器模板中,我将获取自定义元数据值,并在html maxlength=""标记中添加<input>属性。 现在我知道我可以添加一个StringLengthAttribute并按这样做,但是我必须记住保持正则表达式长度和字符串长度同步。我想要超过1000多个型号,我想要去除所需的工作量。

1 个答案:

答案 0 :(得分:0)

  

一旦加载到C#Regex对象中,是否可以从正则表达式模式中提取允许字符串的最大长度?

没有。 Regex class没有内置字段/方法来完成工作。

一个可以编写一个尝试计算匹配的最大理论长度的方法,它可以用于简单的正则表达式,例如你提到的那个,但只要有多个替代品就会出现和/或长度量词(+ / *)理论最大长度的计算将是一场噩梦。