【发布时间】:2020-06-19 15:49:16
【问题描述】:
我正在编写一个函数来在 Go 中执行简单的基于正则表达式的模式匹配,并且需要另外验证我想要与模式匹配的字符串的长度。 这是我的正则表达式的要求:
- 第一个字符必须是字母或数字
- 最后一个字符必须是字母或数字
- 第一个和最后一个之间的任何字符都必须是字母、数字或“.”、“_”和“-”中的任何一个
- 最小长度为一个字符
- 最大长度为 255 个字符
func validateUserEnvironmentName(name string) bool {
var validEnvName = regexp.MustCompile(`^[a-zA-Z0-9]+[a-zA-Z0-9_.\-]*[a-zA-Z0-9]{1,255}$`)
return validEnvName.MatchString(name)
}
除了输入超过 255 个字符的情况外,正则表达式能够验证每个用例。 Go 中的正则表达式是否提供了一种机制来验证整个模式的长度,或者我应该修改正则表达式以适应这个特定的用例吗?
这是用于测试的 Go Playground 链接 - https://play.golang.org/p/GmGYh8vtx34
【问题讨论】:
-
与
^(?:[a-zA-Z0-9][\w.-]{0,253})?[a-zA-Z0-9]$一起去 -
您始终可以通过在正则表达式的开头添加正向前瞻来测试字符串的长度:
(?=.{10,20}$)。在 Perl 和 Ruby 等语言中,$表示行的结尾(而不是字符串的结尾),您可能需要用\z替换$。 -
@CarySwoveland Lookarounds 在 RE2 正则表达式引擎中不受支持。
-
@Wiktor,啊。那将是一个挑战。你知道是否有计划添加它们吗?
-
@revo,考虑发布您的建议作为答案,如果实际上最小长度为 1,则可能使用简单的 mod。