如果正则表达式有效,如何启用按钮

时间:2018-11-28 06:22:37

标签: asp.net regex vb.net

我有一个页面,在该页面上有两个带有正则表达式的文本框。

ASPX代码文本框1

<asp:TextBox ID="txtCasesInsert" runat="server" Width="50px"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="rfvCases" ControlToValidate="txtCasesInsert" ValidationGroup="InsertRecord"
                                runat="server" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator ID="regexCases" ControlToValidate="txtCasesInsert"
                                ValidationExpression="[0-9]+(,[0-9]+)*" ForeColor="Red" ErrorMessage="Please seperate numbers with a comma"
                                runat="server" />

ASPX代码文本框2

<asp:TextBox ID="txtPremiumInsert" runat="server" Width="50px"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="rfvPremium" ControlToValidate="txtPremiumInsert"
                                ValidationGroup="InsertRecord" runat="server" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator ID="regexPremium" ControlToValidate="txtPremiumInsert"
                                ValidationExpression="[0-9]+(,[0-9]+)*" ForeColor="Red" ErrorMessage="Please seperate numbers with a comma"
                                runat="server" />

正则表达式可以同时用于两个文本框。

我现在需要的是能够检查输入到这些文本框中的文本,如果正则表达式有效,则启用我的“插入”按钮,否则,请禁用该按钮。

插入按钮

<asp:Button ID="btnInsertRecord" Width="100px" Height="25px" runat="server" Text="Add Record"
                                CssClass="buttonBlue" ValidationGroup="InsertRecord" />

我要这样做的原因是因为当正则表达式出错时,页面仍然允许用户插入数据,因此我想到了如果正则表达式未成功阻止该按钮,则可以防止这种情况。

我尝试过此C# If regex doesn't match then do something,并且还阅读了Microsoft的Regex文档,以了解有关我可以用Regex进行的操作的更多信息,但是我没有找到任何与所需内容有关的信息。

我还尝试使用钩在文本框上的TextChanged方法创建函数,但是它不起作用。没有错误消息,当我输入错误的字符串时,只是按钮没有被禁用。这就是我当前的代码也遇到的问题。好像什么都没有发生。我已经将调试器挂在_premiumMatch.Success行上,但是再次没有任何反应,它只是让我继续。当我为按钮创建TextChanged方法时,我还尝试将其添加到“页面加载”方法中,但立即禁用了该按钮。

当前VB代码(带有文本框之一的示例)

Dim _regex As Regex = New Regex("[0-9]+(,[0-9]+)*")
        Dim _premiumMatch = _regex.Match(txtPremiumInsert.Text)

        If _premiumMatch.Success Then

            Try
                Company.Applications.ProductionEngine.BusinessAccess.ExcelFileContentUploadBusinessAccess.InsertLimitInsurance(_branch,
                                                                                                                                _premium,
                                                                                                                                _cases,
                                                                                                                                _ddlMonths,
                                                                                                                                _ddlYear)
            Catch ex As Exception
                InformationBox.ShowErrorMessage("Record not added. Please try again")
            End Try
            loadLimitInsurances()
            InformationBox.ShowSuccessMessage("New Record Inserted")
            txtBranchInsert.Text = ""
            txtPremiumInsert.Text = ""
            txtCasesInsert.Text = ""
        End If

不确定我在做什么错。有什么建议么?上面的VB代码目前在我的按钮click事件中,但是即使我使用了无效的正则表达式,当我单击插入仍会执行。

首次编辑 刚刚尝试在页面加载中调用以下函数,但是该按钮立即禁用,并且如果我输入有效的正则表达式也不会启用。同样,示例是一个文本框。

Protected Friend Sub CheckPremium() Handles txtPremiumInsert.TextChanged

    Dim _regex As Regex = New Regex("[0-9]+(,[0-9]+)*")
    Dim _match As Match = _regex.Match(txtPremiumInsert.Text)

    If _match.Success Then
        btnInsertRecord.Enabled = True
    Else
        btnInsertRecord.Enabled = False
    End If

End Sub

第二次修改

我已经尝试了上面的代码,并且已经在文本框中激活了AutoPostBack,但是当我键入无效的表达式时,它回发并激活了我的按钮。

1 个答案:

答案 0 :(得分:1)

尝试以下代码:

Dim _regex As Regex = New Regex("[0-9]+(,[0-9]+)*")
    Dim FoundMatch As Boolean = _regex.IsMatch(textPremiumInsert.Text)

    If FoundMatch = True Then

        Try
            Company.Applications.ProductionEngine.BusinessAccess.ExcelFileContentUploadBusinessAccess.InsertLimitInsurance(_branch,
                                                                                                                            _premium,
                                                                                                                            _cases,
                                                                                                                            _ddlMonths,
                                                                                                                            _ddlYear)
        Catch ex As Exception
            InformationBox.ShowErrorMessage("Record not added. Please try again")
        End Try
        loadLimitInsurances()
        InformationBox.ShowSuccessMessage("New Record Inserted")
        txtBranchInsert.Text = ""
        txtPremiumInsert.Text = ""
        txtCasesInsert.Text = ""
    End If

上面的代码使用Regex.IsMatch方法将传递的字符串与正则表达式模式进行比较。如果字符串与Regex模式匹配,则返回true。