Domanda

Come posso forzare lo script onchange del input per eseguire prima lo script del RangeValidator?

Voglio evitare che una validazione fallita quando l'utente entra in un simbolo del dollaro o la virgola.

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" />

UPDATE:
Ho deciso di usare un CustomValidator che controlla la gamma e utilizza un RegEx valuta. Grazie 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" />
È stato utile?

Soluzione

Hai provato utilizzando un controllo CustomerValidator e combinato la funzionalità dei metodi di pulizia JS e il metodo RangeValidator.

Altri suggerimenti

Credo di poter migliorare su questo. Questo rende virgole e centesimi cifre opzionale:

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

C'è un modo per fare questo registrando lo script; tuttavia perché non utilizzare un validatore espressioni regolari per assicurarsi che l'ingresso è corretta?

Inoltre, il validatore gamma esegue sui campi onBlur js caso, non sul cambiamento.

Appena notato che avete un '' per il punto decimale, ma questo significa che la regex accetterà qualsiasi carattere in quel punto. Si dovrebbe usare \. per quel punto decimale.

/^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(\.[0-9][0-9])?$/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top