Pregunta

¿Cómo puedo forzar la escritura onchange de la entrada a ejecutar antes El guión de la RangeValidator?

Quiero prevenir una falla la validación cuando el usuario introduce un signo de dólar o una coma.

function cleanUp(str) {
    re = /^\$|,/g;
    return str.replace(re, ""); // remove "$" and ","
}

<input type="text" id="salary" runat="server"
onchange="this.value=cleanUp(this.value)" />

<asp:RangeValidator ID="salaryValidator" 
    runat="server" ErrorMessage="Invalid Number"
    ControlToValidate="salary" Type="Double" />

ACTUALIZACIÓN:
Decidí usar un CustomValidator que comprueba el rango y utiliza una expresión regular moneda. Gracias Michael Kniskern.

function IsCurrency(sender, args) {
    var input = args.Value;

    // Check for currency formatting.
    // Expression is from http://regexlib.com/REDetails.aspx?regexp_id=70
    re = /^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$/;
    isCurrency = input.match(re);

    if (isCurrency) {
        // Convert the string to a number.
        var number = parseFloat(CleanUp(input));
        if (number != NaN) {
            // Check the range.
            var min = 0;
            var max = 1000000;
            if (min <= number && max >= number) {
                // Input is valid.
                args.IsValid = true;
                return;
            }
        }
    }

    // Input is not valid if we reach this point.
    args.IsValid = false;
    return;
}

function CleanUp(number) {
    re = /^\$|,/g;
    return number.replace(re, ""); // remove "$" and ","
}       

<input type="text" id="salary" runat="server" />

<asp:CustomValidator ID="saleryValidator" ControlToValidate="salary" runat="server" 
ErrorMessage="Invalid Number" ClientValidationFunction="IsCurrency" />
¿Fue útil?

Solución

¿Ha intentado utilizar un control CustomerValidator y combinado la funcionalidad de los métodos de limpieza JS y el método RangeValidator.

Otros consejos

Creo que puedo mejorar en eso. Esto hace que comas y centavos dígitos opcional:

^\$?([0-9]{1,3},?([0-9]{3},?)*[0-9]{3}|[0-9]+)(\.[0-9]{0,2})?$

Hay una manera de hacer esto mediante el registro de la secuencia de comandos; Sin embargo ¿por qué no usar un validador de expresiones regulares para asegurarse de que la entrada es correcta?

Además, el validador Rango ejecuta en los campos de eventos onBlur js, no en el cambio.

Sólo notado que usted tiene un '' para el punto decimal, pero eso significa que la expresión regular aceptará cualquier carácter en ese lugar. Debe utilizar \. para ese punto decimal.

/^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(\.[0-9][0-9])?$/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top