在ASP.Net RangeValidator脚本执行之前删除“$”

时间:2008-12-09 21:37:41

标签: asp.net currency rangevalidator

如何强制输入的onchange脚本在 RangeValidator脚本之前运行

我希望在用户输入美元符号或逗号时阻止验证失败。

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

更新:
我决定使用CustomValidator检查范围并使用货币RegEx。谢谢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" />

4 个答案:

答案 0 :(得分:3)

您是否尝试过使用CustomerValidator控件并将JS清理方法和RangeValidator方法的功能结合起来。

答案 1 :(得分:3)

我想我可以改进。这使得逗号和美分数字可选:

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

答案 2 :(得分:0)

通过注册脚本可以做到这一点;但是为什么不使用正则表达式验证器来确保输入正确?

此外,Range验证器在onBlur js事件的字段上执行,而不是在更改时执行。

答案 3 :(得分:0)

注意到你有'。'对于小数点,但这意味着正则表达式将接受该点中的任何字符。您应该使用\.作为该小数点。

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