buenas....
utiliza un patron mas definido. en lugar de detectar los caracteres invalidos, detecta los validos con el orden necesario. el patron ahora mismo dice
buscar cualquier caracter que no sea numeros y punto, pero no indica orden ni cantidad en que los caracteres validos deben aparecer. luego al validar, convierte al inverso el boolean de test.