2017-01-09 1 views
-1

도와주세요, 새 걸로 이동해. 나는 문자열을 정규 표현식에 전달하고 boolan을 반환하는 함수를 작성했다. 생년월일의 올바른 형식을 확인할 때 내 테스트가 계속 실패합니다.부울 기능 이동

내 시험 :

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) 
    } 

} 

매칭 기능 부울 validFormatRegexp 아닌 bool 때문에 귀하의 테스트가 실패하지 않는

func IsMatchingRegex(s string, regex string) bool { 
validFormat := regexp.MustCompile(regex) 
matched := validFormat.MatchString(s) 
if validFormat { 
    return false 
} 

return true 
} 

답변

1

, 그것은 컴파일 할 수 없습니다.

귀하의 부울는 matched,하지만 당신은

지금 내 오류가 표시
func IsMatchingRegex(s string, regex string) bool { 
    return regexp.MustCompile(regex).MatchString(s) 
} 
+0

, 그것은 일을 간단하게 MatchString의 결과를 반환 (또는 한 줄 이후의 모든 별도의 기능을 사용할 수 없습니다) 수! 고맙습니다! – Skipoura

+0

그런데, 여기에'MustCompile'을 사용하는 것은 좋은 생각이 아닙니다. 정규식이 컴파일되지 않으면 패닉이 발생합니다. 아마도 오류를 반환해야합니다. 그렇지 않으면 오류가 발생합니다. "필수"유형 메소드는 전역 (프로그램이 시작될 때 실행되고 프로그램 시작시 패닉이 좋을 때 작동하는 동안 작동하는 것) 또는 테스트를 위해 가장 잘 사용됩니다. – Kaedys

+0

짐바브웨도 여기에 동의합니다. 'IsMatchingRegex (s, r)'과'regexp.MustCompile (r) .MatchString (s) '을 호출하는 것과 큰 차이는 없습니다. 기능이 필요하지 않습니다. 이 변경은 입력 문자열이 아닌 전역으로 날짜 정규식을 정의 할 수있게하여 우발적 인 실수 또는 복사 - 붙여 넣기 오류를 방지합니다. – Kaedys