Thats a very good idea, Eric. Thank you. With some minor changes now I use:
ClearAll[myVectorLQ];
myVectorLQ[length_][expr_] := TrueQ[length == Length@expr] && VectorQ[expr];
myVectorLQ[length_, test_][expr_] :=
TrueQ[length == Length@expr] && VectorQ[expr, test];
Then I can write:
ClearAll[fL, fLN];
fL[v_?(myVectorLQ[5])] := Style["fL OK", Blue, Bold];
fLN[v_?(myVectorLQ[5, NumericQ])] := Style["fLN OK", Blue, Bold];
a = Sqrt[2]; b =.;
Do[
Print["v = ", Style[v, Bold], ", {fL[v],fLN[v]} = ", {fL[v], fLN[v]}];
, {v, {{1, a, 3, 4, 5}, {1, a, b, 4, 5}, {1, {2 a}, 3, 4, 5}, {1, a, 3,
4}}}];

This also solves the problem of passing a default value:
ClearAll[fLD, fLND];
fLD[v : (_?(myVectorLQ[5])) : {1, 2, 3, 4, 5}] := Style["fLD OK", Blue, Bold];
fLND[v : (_?(myVectorLQ[5, NumericQ])) : {1, 2, 3, 4, 5}] :=
Style["fLND OK", Blue, Bold];
a = Sqrt[2]; b =.;
Do[
Print["v = ", Style[If[v != {}, First[v], v], Bold],
", {fLD[v],fLND[v]} = ", {fLD @@ v, fLND @@ v}];
, {v, {{{1, a, 3, 4, 5}}, {{1, a, b, 4, 5}}, {{1, {2 a}, 3, 4, 5}}, {{1, a,
3, 4}}, {}}}];
