bueno no es exactamente así. me expresé mal. lo que ocurre es que toma el primer valor de cada parte y si el valor a comprobar no está en ese rango toma el segundo valor de la primera parte y el primero de la segunda. con lo que en una expresión [1-95] hay dos combinaciones [1-9] y [1-5]. unos ejemplos te lo aclarara
Cita: for (var i = 0; i <= 9; i++) {
if(!/[8828888-999999]/.test(i)) console.log(i);
}
for (var i = 0; i <= 9; i++) {
if(!/[88288881-999999]/.test(i)) console.log(i);
}
imagina que quieres que el valor a evaluar esté entre el 80 y 99
Cita: for (var i = 80; i <= 99; i++) {
console.log(/^([89]\d)$/.test(i));
}
una vez dicho esto último, no es practico evaluar si el valor está entre el 1 y 9999 con expresiones regulares. yo lo haría con parseInt()
Cita: var str = parseInt('99099', 10);
if(str < 1 || str > 9999) {
console.log('error ' + str);
}