【发布时间】:2019-08-01 13:59:52
【问题描述】:
这是我的正则表达式:
Dim vbRegX As Object, vbRegXMatch As Object
Set vbRegX = CreateObject("vbscript.regexp")
With vbRegX
.Global = True
.IgnoreCase = True
.Pattern = "^[a-zA-Z0-9_-]{1,20}$"
End With
使用它的代码:
Set vbRegXMatch = vbRegX.Execute(Me.txtProduct.Text)
If vbRegXMatch.Count = 1 Then
MsgBox "This string has invalid characters in it. Illegal characters are out side of the following ranges:" & vbNewLine & vbNewling & "a-z or A-Z" & vbNewLine & vbNewling & "0-9, - or _. Please try again."
Cancel = True
Me.txtProduct.SetFocus
Set vbRegXMatch = Nothing
Set vbRegX = Nothing
Exit Sub
End If
此代码使用无效字符触发,但长度大于 20 时不会触发。这是 Regex Buddy 给我的输出:
Dim FoundMatch As Boolean
Dim myRegExp As RegExp
Set myRegExp = New RegExp
myRegExp.Pattern = "^[a-zA-Z0-9_-]{1,20}$"
FoundMatch = myRegExp.Test(SubjectString)
谁能这么好心地指出我错过了什么?
控件的视觉效果:
【问题讨论】:
-
^[a-zA-Z0-9_-]{1,20}$不是在验证 good 输入吗?像If myRegExp.Test(Me.txtProduct.Text) = False Then一样使用它 -
长度大于 20 时不会。但它会触发无效字符。
-
它工作正常 - 请参阅this demo。
-
@WiktorStribizew 谢谢,但发生这种情况时它不会触发 - 请参阅编辑后的帖子。
-
If vbRegX.Test("1234555") = False Then有效,它不会引发任何错误。If vbRegX.Test("123455=5") = False Then也有效,它会触发错误。
标签: regex vba ms-access regexbuddy