我知道这里有很多问题要问为什么他们的正则表达式失败,但我无法专门看到Go/Golang。为什么我的正则表达式总是在Go中失败?
我有一个ID类型,这是一个字符串,其中加入了一些方法:type ID string
和这个函数,如果ID有效,它应该返回一个bool。
我的有效性标准是:
- 20个字符。
- 任何大写字母A-Z。
- 任何数字0-9。
所以我的正则表达式,我在几个不同的在线工具测试是/[A-Z0-9]{20}/
但每次我跑我的验证功能时,它返回无论输入错误。具体来说,regexp.MatchString()
函数返回false和nil。
以下是我的验证函数,即使当我将正则表达式更改为/.{20}/
时,匹配总是错误的,它应该匹配任何东西。
func (this ID) validate() bool {
regexString := "/[A-Z0-9]{" + strconv.Itoa(MAX_ID_LENGTH) + "}/"
fmt.Println(regexString)
thisStr := this.ToString()
fmt.Println(thisStr)
charCount := utf8.RuneCountInString(thisStr)
fmt.Println(charCount)
thisStr = strings.ToUpper(thisStr)
fmt.Println(thisStr)
match, err := regexp.MatchString(regexString, thisStr)
fmt.Println(match, err)
//Check string length is correct and matches regex.
if charCount != MAX_ID_LENGTH || !match {
return false
} else {
return true
}
}
是否与我使用该函数的方式有关?我很难过。
Note: .ToUpper()函数在那里,因为当我的ID生成时,它们只生成大写字母和0-9,但我想要“ABC”如果键入被视为“ABC”手动在以后的日期。
辉煌!谢谢,它现在完美。 – leylandski 2015-04-02 14:54:21
我不得不等待'你可以在x分钟内接受这个消息',否则我会立刻离开。 – leylandski 2015-04-02 15:17:33