所以我在textbox中为textchanged事件编写了一个正则表达式,一切都很顺利,但是当我在字符或空格后添加数值时,它会挂起我的项目,有时我可以在字符后添加数值,但是当我按下时退格它完全挂起我的项目!没有任何错误然后出现!
这是我的代码:
Private Sub txtbook_name_TextChanged(sender As Object, e As EventArgs) Handles txtbook_name.TextChanged
Dim regex As New System.Text.RegularExpressions.Regex("^([a-zA-Z]*( *)?)*$")
If (regex.IsMatch(txtbook_name.Text)) Or txtbook_name.Text = "" Then
ErrorProvider1.SetError(txtbook_name, String.Empty)
Else
ErrorProvider1.SetError(txtbook_name, "Please enter valid Character")
End If
End Sub
答案 0 :(得分:2)
您遇到的问题称为灾难性回溯。请参阅regex demo重现此问题。发生这种情况是因为有几个可选的子模式,因此可以匹配相同的子字符串,输入字符串越长,正则表达式引擎在承认没有匹配之前必须检查的组合越多。
您可以使用
^[a-zA-Z ]*$
此正则表达式将匹配:
^
- 字符串开头[a-zA-Z ]*
- 0个或多个ASCII字母或常规空格(匹配所有空格,使用\s
并匹配所有Unicode字母,使用\p{L}\p{M}
)$
- 字符串结尾