Musisz regex'a zamienić na taki:
^(Ha){3,5}$
Błąd w twoim regex'ie polega na tym, że jakby go przetłumaczyć na polski to wygląda tak:
- (Ha) -> wyraz Ha
- {3,5} -> 3 do 5 powtórzeń
Czyli każdy napis, który zawiera w sobie 3 do 5 powtórzeń Ha będzie pasował.
Poprawiony regex wyglądałby w tym przypadku tak:
- ^ -> początek wyrazu
- (Ha) -> wyraz Ha
- {3,5} -> 3 do 5 powtórzeń
- $ -> koniec wyrazu
Czyli każdy napis, który od początku do końca ma tylko 3 do 5 powtórzeń Ha będzie pasował.