添加“最大长度”给正则表达式

添加“最大长度”给正则表达式

问题描述:

如何扩展已经存在的正则表达式的一个属性,告诉正则表达式不能超过最大长度(比方说)255?添加“最大长度”给正则表达式

我有以下的正则表达式:

([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)

我已经尝试过这样的,但没有成功

{.,255([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)}

+1

检查匹配结果的长度? – Cameron

+0

'{。,255}'表达式之后。 –

要做到这一点,最好的方法是,如果它必须是一个完全基于正则表达式的解决方案,那就是使用lookarounds。

查看这个例子:http://regex101.com/r/yM3vL0

我在做什么这里只匹配至多3个字符的字符串。诚然,对我的例子来说,这不是最好的办法。但忽视这一点,我只是想展示一个适合你的例子。

您也可以以固定的模式,否则发动机会忽略环视(我要在深入解释一下吗?)

换句话说,你可以使用正则表达式如下限制它至多255个字符:

^(?!^.{256})([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?) 

我也觉得这是我的责任,告诉你你的正则表达式不好,你应该感觉不好。

+0

+1,当然你是完全正确的。我已经完全删除了正则表达式。但是,尽管如此,你的文章帮助我理解正则表达式更好:)感谢! – SeToY

+1

没问题!如果您想更好地理解正则表达式,请查看http://www.regex101.com/quiz/上的测验:) –

+0

@Lindrian感谢您的链接。 –

一个正则表达式是不是真的为解决所有问题。在这种情况下,我建议测试255的长度将会很昂贵,因为这将需要255个状态的底层表示。相反,只需单独测试字符串的长度。

但如果你真的要,你需要让你的角色可选,所以像:

.?{255} 

将匹配的255个字符的字符串。

+0

但是会允许任何人在你的电子邮件前放置255个随机字符! – jessehouwing

为什么不直接检查字符串的最大长度?如果您使用DataAnnotations,则可以在该属性上粘贴[StringLength(255)]。

如果您使用ASP.NET验证器,则可以使用RangeValidator。

如果您使用的是自定义验证函数,那么在您将一个复杂的正则表达式对其进行复杂的正则表达式之前,它的可读性要高得多(并且速度更快)。

你“可能”能够使用前瞻如下:

^(?=.{0,255}$)your regex here$ 

所以......

^(?=^.{0,255}$)([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$