我有一个页面,在该页面上有两个带有正则表达式的文本框。
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
,但是当我键入无效的表达式时,它回发并激活了我的按钮。
答案 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。