2017-01-09 13 views
-1

助けてください、私はGoで新しくなりました。私は文字列を正規表現と返すブール関数を渡して書いた。生年月日の正しい書式を検証すると、私のテストは失敗し続けます。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) 
    } 

} 

マッチング機能ブール

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

return true 
} 

答えて

1

あなたのテストが失敗していないvalidFormatRegexpないboolあるので、それはコンパイルできません。

あなたのブール値がmatchedですが、あなたは、単に私が今、私のエラーが表示MatchString(またはしない、それは、単一の行だから、まったく別の関数を使用)

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

の結果を返すことができ、それは働きました!ありがとうございました! – Skipoura

+0

それは、ここで 'MustCompile'を使うのは良い考えではないでしょう。正規表現がコンパイルされない場合、パニックになります。おそらくエラーを返すか、そうであれば単にfalseを返します。 「必須」タイプのメソッドは、グローバル(プログラムの起動時に実行され、プログラム起動時のパニックは問題ありません。 – Kaedys

+0

こちらもJimBに同意します。 'IsMatchingRegex(s、r)'と 'regexp.MustCompile(r).MatchString(s) 'を呼び出す間に大きな違いはありません。機能する必要はありません。この変更によって、入力文字列ではなく、グローバル正規表現として日付正規表現を定義して、誤ったミスタイプやコピー・ペースト・エラーを避けることもできます。 – Kaedys