【发布时间】:2016-12-25 15:00:26
【问题描述】:
一旦加载到 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 为我们的视图模型提供输入验证。
我想要做的是覆盖该属性,以便我可以添加一个自定义元数据属性,该属性包含从正则表达式字符串解析的字符串的最大允许长度。在我的字符串编辑器模板中,我将获取自定义元数据值,并将 maxlength="" 属性添加到 html <input> 标记。
现在我知道我可以添加一个StringLengthAttribute 并这样做,但是我必须记住保持正则表达式长度和字符串长度同步。对于 1000 多个模型,我想消除重复数据所需的工作量。
【问题讨论】:
-
使用另一个正则表达式解析前一个。
-
你能举个例子吗?
-
没有我知道的属性,您可以从其中读取字符串的长度,我也猜想它也没有实现。你可以做的是,将它与你的字符串匹配并给出匹配字符的计数,如果你确定有一个限制 - 并且有一个匹配。问题是您可以在正则表达式模式中拥有任意数量的字符限制,因此没有一个实际限制 - revo 的意思是用另一个正则表达式解析您的示例正则表达式中的 20 个
-
这里:从大括号中取出数字 - \{\d+?\,(\d+?)\} - 或分别为 \{\d+?\,(\d+?)\} $ 最后一个可能的限制
-
你想达到什么目的?你能添加一个用例吗?