Я пытаюсь создать простую функцию ввода даты в командной строке.Regex match делает странные вещи для меня
Я получаю странное поведение при использовании соответствия регулярному выражению с golang: правильный шаблон mach возвращает false, но беспорядок с моим циклом, а неправильный шаблон просто возвращает false. Вот функция, которая производит ошибку:
func ReadDate(fieldname string) (value string) {
var validID = regexp.MustCompile(`^\d\d\d\d\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dez)\s\d\d$`)
for {
value = ""
fmt.Printf("%s - e.g. 2014 Jan 01: ", fieldname)
fmt.Scanf("%s\n", &value)
if value == "" {
break // empty value is ok for input
}
fmt.Printf("validid %v\n", validID.MatchString(value))
if validID.MatchString(value) {
break
} else {
fmt.Printf("invalid entry, try again..\n")
}
}
return
}
, когда я запускаю его, я получаю следующее:
date - e.g. 2014 Jan 01: x
validid false
date - e.g. 2014 Jan 01: x
validid false
date - e.g. 2014 Jan 01: 2014 Jan 01
validid false
date - e.g. 2014 Jan 01: validid false
date - e.g. 2014 Jan 01: validid false
date - e.g. 2014 Jan 01:
Обратите внимание, как последняя запись с правильным рисунком выполняется еще два раза через бесконечный цикл и затем останавливается. Любые идеи, почему это может произойти?
Go версии 1.2 Linux/386