has vuelto a usar el método match(). en este caso el adecuado es test(). no has salvado (d) por lo que no será tomado como un metacaracter. has incluido el metacaracter (?) que es equivalente a {0.1} y hará que admita valores vacíos
Cita: if (!/^[1-9]\d{0,3})$/.test(visa)