Frage

Wie kann ich zwingen, die Onchange Skript Eingabe zu laufen, bevor des Skripts RangeValidator?

Ich möchte einen Fehler bei der Überprüfung verhindern, wenn der Benutzer ein Dollarzeichen oder Komma eintritt.

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:
Ich beschloss, einen CustomValidator zu verwenden, die den Bereich überprüft und verwendet eine Währung RegEx. Dank 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" />
War es hilfreich?

Lösung

Haben Sie versucht, eine CustomerValidator Steuerung mit und kombiniert die Funktionalität der JS Reinigungsmethoden und die RangeValidator Methode.

Andere Tipps

Ich glaube, ich auf das verbessern kann. Dies macht Komma und Cent Ziffern optional:

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

Es gibt einen Weg, dies zu tun, indem Sie das Skript Registrierung; aber warum nicht einen Regular Expression Validator verwenden, um sicherzustellen, dass die Eingabe korrekt ist?

Auch führt der Range-Validator auf den Feldern onBlur js Ereignis, nicht auf Veränderung.

habe gerade bemerkt, dass Sie eine haben ‚‘ für den Dezimalpunkt, aber das bedeutet, dass die regex jedes Zeichen an dieser Stelle annehmen. Sie sollten \. für dieses Komma verwenden.

/^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(\.[0-9][0-9])?$/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top