限制RegEx仅匹配长度为1-254个字符的字符串

时间:2013-05-01 15:59:39

标签: regex string email-validation

这是我的RegEx:

"^[^\.]([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)([\.]{0,1})([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)[^\.]@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$"

我只需要匹配少于255个字符的字符串。

我尝试在RegEx的开头添加单词boundary但它失败了:

"^(?=.{1,254})[^\.]([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)([\.]{0,1})([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)[^\.]@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$"

3 个答案:

答案 0 :(得分:3)

你需要前瞻中的$来确保高达254.否则,即使超过254,前瞻也会匹配。

(?=.{1,254}$)

另外,请记住,您可以大大简化正则表达式,因为在字符类(方括号)中,通常需要转义的许多字符不需要。

"[\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]"

与此相同:

"[-\w!#$%&'*+/=`{|}~?^]"

请注意,短划线必须是字符类中的第一个文字短划线,并且插入符号必须不是第一个。

通过其他一些简化,这里是完整的字符串:

"^(?=.{1,254}$)[-\w!#$%&'*+/=`{|}~?^]+(\.[-\w!#$%&'*+/=`{|}~?^]+)*@((\d{1,3}\.){3}\d{1,3}|([-\w]+\.)+[a-zA-Z]{2,6})$"

注意:

  • 我删除了第一个字符不应该是句点([^。])的规定,因为下一个字符类无论如何都与句点不匹配,所以它是多余的。
  • 我删除了许多无关的内容
  • 我用\ d
  • 替换了[0-9]
  • 我用简写“?”
  • 替换了{0,1}
  • 在@符号之后,您似乎尝试匹配IP地址或文本域名,因此我将它们分开以使其不能成为组合
  • 我不确定末尾的可选方括号是什么,所以我删除了它:“()?)”

我在Regex Hero中尝试过,它有效。看看它是否适合你。

答案 1 :(得分:2)

这取决于您使用的语言。例如,在Python中,您可以使用正则表达式将文本拆分为单独的字符串,然后使用len()删除长度超过您想要的255个字符的字符串

答案 2 :(得分:1)

我认为this帖子会有所帮助。它显示了如何限制某些模式,但我不确定如何将它添加到整个正则表达式。