1

我有以下正则表达式:

ValidationExpression="[0-9]+(,[0-9]+)*"

它允许格式为:12,2345 或 231,23454

现在我想包含一个条件,该条件总体上只允许最多 7 位数字,不包括逗号。 下面是修改后的代码

以下是在项目模板中

我在项目模板中也有一个单选按钮

<asp:TextBox runat="server" ID="tbText" CssClass="someclass" MaxLength="11"
                                          %>'></asp:TextBox>

<asp:RegularExpressionValidator ValidationExpression="[0-9]+(,[0-9]+)*" ID="ValComp" runat="server" CssClass="asdf"
    ControlToValidate="tbMileage" Text="*" Enabled="false" Display="Dynamic"/>

<asp:CustomValidator ID="cvalMileage" runat="server" CssClass="adsf" Text="*" Display="Dynamic">
</asp:CustomValidator>

<asp:CustomValidator ID="CustomValidator1" ClientValidationFunction="functionName" 
    runat="server" CssClass="asd" Text="*" Display="Dynamic">
</asp:CustomValidator>

因为我想验证单选按钮检查了中继器中的相应文本框,所以下面是我编写的代码

var selText = $(".Class1 input[type=radio]:checked").closest(".Class1").find(".subClassText input[type=text]").val();
alert('Hi');
if (selText.replace(",", "").length <= 7) {
    args.IsValid = true;
}
else {
    args.IsValid = false;
}

警报触发两次,并且基于 args 是 False 我有一个弹出两次触发

谢谢。

4

2 回答 2

2

正则表达式不擅长这个问题,但如果你将输入限制为最多一个逗号,这个表达式将适合:

([0-9]{0,0}[,]?[0-9]{0,7})|([0-9]{0,1}[,]?[0-9]{0,6})|([0-9]{0,2}[,]?[0-9]{0,5})|([0-9]{0,3}[,]?[0-9]{0,4})|([0-9]{0,4}[,]?[0-9]{0,3})|([0-9]{0,5}[,]?[0-9]{0,2})|([0-9]{0,6}[,]?[0-9]{0,1})|([0-9]{0,7}[,]?[0-9]{0,0})

你会认识到这个问题不太适合正则表达式,因为这个表达式被固定为你的最大值 7。

于 2012-09-22T18:37:47.367 回答
0

您可以使用带有客户端验证的CustomValidator控件,如下所示:

ASP 代码:

<asp:CustomValidator id="CustomValidator1" runat="server"
           ControlToValidate="YourControlNameHere"
           ClientValidationFunction="ClientValidation"
           OnServerValidate="ServerValidation"
           ErrorMessage="Invalid number." />

JavaScript(使用 jQuery):

function ClientValidation(source, arguments)
{
    var inputText = arguments.Value;
    var expression = /^[0-9]+(,[0-9]+)*$/;
    if (expression.test(inputText) && inputText.replace(",", "").length <= 7) {
        arguments.IsValid = true;
    }
    else {
        arguments.IsValid = false;
    }
}

后面的 C# 代码:

public void ServerValidation(object source, ServerValidateEventArgs args)
{
    string inputText = args.Value;
    Regex regex = new Regex(@"^\d+(,\d+)*$");
    if (regex.IsMatch(inputText) && inputText.Replace(",", "").Length <= 7)
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}
于 2012-09-23T21:50:13.360 回答