2017-01-09 3 views
-1

Пожалуйста, помогите, я новичок в 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 
} 

ответ

1

Ваш тест не удается, он не может собрать, потому что validFormat является Regexp не bool.

Ваш BOOL является matched, но вы могли бы просто вернуть результат MatchString (или не использовать отдельную функцию вообще, так как это одна строка)

func IsMatchingRegex(s string, regex string) bool { 
    return regexp.MustCompile(regex).MatchString(s) 
} 
+0

Я вижу свою ошибку сейчас, это сработало! Спасибо! – Skipoura

+0

Это, вероятно, не очень хорошая идея использовать 'MustCompile' здесь. Он паникует, если регулярное выражение не компилируется. Вероятно, возможно, либо верните ошибку, либо просто ложь, если это так. Методы типа «Должны» лучше всего использовать для глобалов (которые запускаются при запуске программы, а паники при запуске программы прекрасны). Это те, которые во время операции сосут) или для тестов. – Kaedys

+0

Также согласен с JimB здесь. Существует не так много разницы между вызовом 'IsMatchingRegex (s, r)' и 'regexp.MustCompile (r) .MatchString (s)'. Не нужно быть функцией. Это изменение также позволит вам определять регулярное выражение даты как глобальное, вместо того, чтобы быть входной строкой, которая позволяет избежать случайных ошибок или ошибок копирования-вставки. – Kaedys

Смежные вопросы