如何基于DropDownList选择验证具有正则表达式的TextBox?

时间:2014-08-26 10:38:42

标签: c# asp.net regex validation textbox

我想基于具有正则表达式的下拉列表验证文本框。我想根据下拉列表中选择的卡片类型验证信用卡号。

以下是我的代码示例:

<table runat="server">
<tr>
    <td><asp:Label ID="Label4" runat="server" Text="Credit Card Type"></asp:Label></td>
    <td><asp:DropDownList ID="DropDownList1" runat="server">
            <asp:ListItem Text="Visa" Value="Visa"></asp:ListItem>
            <asp:ListItem Text="MasterCard" Value="Mastercard"></asp:ListItem>
        </asp:DropDownList></td>
</tr>
<tr>
    <td><asp:Label ID="Label1" runat="server" Text="Card Number"></asp:Label></td>
    <td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td> 
    <td><asp:CustomValidator ID=CustomValidator1 runat="server" ErrorMessage="Incorrect card, please re-renter!" ControlToValidate="TextBox1" Display="Dynamic" ForeColor="Red" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator></td>      
</tr>
<tr>
    <td><asp:Button ID="Button1" runat="server" Text="Submit" CommandName="Submit"/></td>
</tr>
</table>

我的其他代码:

protected void CustomValidation1_ServerValidate(object Source, ServerValidateEventArgs args)
{
    string expression = "";

    switch (DropDownList.SelectedValue)
    {
        case "Visa":
        expression = "^(4)([0-9]{15})$";
        break;
        case "MasterCard":
        expression = "^(5[1-5])([0-9]{14})$";
        break;
    }
}

因此,当我在下拉列表中选择MasterCard并在文本框中输入数字时。我想用正则表达式^(5[1-5])([0-9]{14})$进行验证。此外,当我在Dropbox列表中选择Visa并在文本框中输入数字时,它将使用^(4)([0-9]{15})$的表达式进行验证。

这将是万事达卡:

件: 5212345678901234

不匹配: 1234567890123456

2 个答案:

答案 0 :(得分:1)

您可以做的如下:

而不是custom validator,您需要在regular expression validator的末尾添加textbox,并为drop down list添加代码流程,请使用if允许更改持续存在的语句。此外,您的drop down list需要Auto Post Back设置为True才能进行更改。

以下是您的问题背后的理想代码:

protected void DropDownList1_OnIndexChanged(object Source, EventArgs args)
{


    if (DropDownList.SelectedItem.Text == "Visa")
    {
        RegularExpression1.ValidationExpression = "^(4)([0-9]{15})$";
        else
        RegularExpression1.ValidationExpression = "^(5[1-5])([0-9]{14})$";
    }
}

答案 1 :(得分:0)

我会这样做:

为VISA-Regex声明2个RegExpValidators,为MasterCard-Regex声明另一个。 声明OnSelectedIndexChanged - 后面代码中DropDownList的方法。 在此方法中,根据SelectedValue的{​​{1}}启用正确的验证器,并禁用另一个验证器。