У меня проблемы с регулярным выражением, чтобы проверить, допустимо ли строка, и если не отображать сообщение. Я проверил учебники и нашел это, но он всегда возвращает true, соответствует ли строка или нет.Почему test.regex всегда возвращает true?
Function TestRegEx(regex As Object, testpattern As String, stringtotest As String) As Boolean
Dim regMatch As Object ' MatchCollection
With regex
.Pattern = testpattern
.MultiLine = False
End With
' match test string against regex string
Set regMatch = regex.Execute(stringtotest)
TestRegEx = (regMatch.Count > 0)
End Function
Sub TestRegex()
Dim regex As Object ' RegExp
Dim pattern As String
Dim inputstring As String
Set regex = GetRegEx
If Not regex Is Nothing Then
testpattern = "[0-9]{1,3}" ' 1 to 3 numbers
stringtotest = "12"
MsgBox TestRegEx(regex, pattern, inputstring)
End If
End Sub
Если я пишу что-то еще в: stringtotest, как: собаки, воздушный шар, 3333 всегда возвращает True.
testpattern = "^[0-9]{5}$"
stringtotest = "KB"
возвращается также: Правда
Я пытался добавить
If TestRegEx(regex, pattern, inputstring) = True Then
msgbox "OK"
Else
msgbox "NotOK"
End IF
Но это не работает, я всегда получаю OK. Что не так с кодом? Как это исправить?
То же самое происходит с моим собственным кодом.
В моем случае мне нужно проверить, есть ли тема письма в Outlook, содержащая определенную строку. Я использую немного другой код, затем учебник, но он никогда не получает False.
regex.pattern = "Cid#\d{4}"
If regex.Test(msg.Subject) = True Then
...
Else
...
Редактировать
Function GetRegEx() As Object
On Error Resume Next
Set GetRegEx = CreateObject("VBScript.RegExp")
End Function
Я забыл это, извините.
И я нашел этот учебник по jpsoftware
edit2: Мой код
Dim objInsp As Outlook.Inspector
Dim msg As Outlook.MailItem
Dim regex As New RegExp
Dim prevsubj As String
Set objInsp = Application.ActiveInspector
Set msg = objInsp.CurrentItem
prevsubj = msg.Subject
subjlen = Len(prevsubj)
regex.IgnoreCase = False
regex.pattern = "Cid#\d{4}"
Set regex = GetRegEx
If regex.Test(msg.Subject) = True Then
MsgBox regex.Test(msg.Subject)
newtempsubj = Left(prevsubj, subjlen - 8)
msg.Subject = newtempsubj & " Cid#" & 'newidstring
msg.Close olSave
Else
MsgBox prevsubj
msg.Subject = prevsubj & " Cid#" & 'newidstring
msg.Close olSave
End If
Спасибо заранее, Z
Ваш код не имеет смысла. 'regex.Test' не существует, и вы проверяете возвращаемое значение из' Sub'.? –
'GetRegEx' что это такое – sam092
Я сказал, что мой код отличается, и в моем коде' regex.Test' существует. Первая часть - это полный учебник, из которого я хотел бы понять эти функции. – ZZA