添加“最大长度”给正则表达式
如何扩展已经存在的正则表达式的一个属性,告诉正则表达式不能超过最大长度(比方说)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})(\]?)}
要做到这一点,最好的方法是,如果它必须是一个完全基于正则表达式的解决方案,那就是使用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})(\]?)
我也觉得这是我的责任,告诉你你的正则表达式不好,你应该感觉不好。
+1,当然你是完全正确的。我已经完全删除了正则表达式。但是,尽管如此,你的文章帮助我理解正则表达式更好:)感谢! – SeToY
没问题!如果您想更好地理解正则表达式,请查看http://www.regex101.com/quiz/上的测验:) –
@Lindrian感谢您的链接。 –
一个正则表达式是不是真的为解决所有问题。在这种情况下,我建议测试255的长度将会很昂贵,因为这将需要255个状态的底层表示。相反,只需单独测试字符串的长度。
但如果你真的要,你需要让你的角色可选,所以像:
.?{255}
将匹配的255个字符的字符串。
但是会允许任何人在你的电子邮件前放置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})(\]?)$
检查匹配结果的长度? – Cameron
'{。,255}'表达式之后。 –