Пожалуйста, помогите, я новичок в Go. Я написал функцию, передающую строку регулярное выражение и возвращаю boolan. мой тест продолжает терпеть неудачу при проверке правильного формата даты рождения.Булевы функции в Go
Мой тест:
func TestIsMatchingRegex(t *testing.T) {
t.Parallel()
var tests = []struct {
dob string
reg string
expected bool
desc string
}{
{dob: "1928-06-05", reg: `[12][0-9]{3}-[01][0-9]-[0-3][0-9]`, expected: true, desc: "test1"},
{dob: "1928/06/05", reg: `[12][0-9]{3}-[01][0-9]-[0-3][0-9]`, expected: false, desc: "test2"},
}
for _, test := range tests {
actual := IsMatchingRegex(test.dob, test.reg)
assert.Equal(t, actual, test.expected, test.desc)
}
}
функция Matching булево
func IsMatchingRegex(s string, regex string) bool {
validFormat := regexp.MustCompile(regex)
matched := validFormat.MatchString(s)
if validFormat {
return false
}
return true
}
Я вижу свою ошибку сейчас, это сработало! Спасибо! – Skipoura
Это, вероятно, не очень хорошая идея использовать 'MustCompile' здесь. Он паникует, если регулярное выражение не компилируется. Вероятно, возможно, либо верните ошибку, либо просто ложь, если это так. Методы типа «Должны» лучше всего использовать для глобалов (которые запускаются при запуске программы, а паники при запуске программы прекрасны). Это те, которые во время операции сосут) или для тестов. – Kaedys
Также согласен с JimB здесь. Существует не так много разницы между вызовом 'IsMatchingRegex (s, r)' и 'regexp.MustCompile (r) .MatchString (s)'. Не нужно быть функцией. Это изменение также позволит вам определять регулярное выражение даты как глобальное, вместо того, чтобы быть входной строкой, которая позволяет избежать случайных ошибок или ошибок копирования-вставки. – Kaedys