除逗号外的最大数字的正则表达式

时间:2012-09-22 18:24:38

标签: asp.net

我有以下正则表达式:

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我有一个触发两次的弹出窗口

感谢。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您可以使用CustomValidator控件进行客户端验证,如下所示:

ASPX代码:

<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;
    }
}