使用正则表达式验证只接受字符和空格但在VB.NET中没有前导数字

时间:2015-12-09 07:14:01

标签: regex vb.net validation

所以我在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

1 个答案:

答案 0 :(得分:2)

您遇到的问题称为灾难性回溯。请参阅regex demo重现此问题。发生这种情况是因为有几个可选的子模式,因此可以匹配相同的子字符串,输入字符串越长,正则表达式引擎在承认没有匹配之前必须检查的组合越多。

您可以使用

^[a-zA-Z ]*$

此正则表达式将匹配:

  • ^ - 字符串开头
  • [a-zA-Z ]* - 0个或多个ASCII字母或常规空格(匹配所有空格,使用\s并匹配所有Unicode字母,使用\p{L}\p{M}
  • $ - 字符串结尾