2013-12-19 217 views
-2

我有麻煩使用正則表達式來測試一個字符串是否可以接受,如果不顯示消息。我檢查了教程,並找到了這一個,但它總是返回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,就像:baloon,dog,3333它總是返回True。

testpattern = "^[0-9]{5}$" 
stringtotest = "KB" 

也返回:真

我嘗試添加

If TestRegEx(regex, pattern, inputstring) = True Then 
msgbox "OK" 
Else 
msgbox "NotOK" 
End IF 

但它不工作,我總是得到確定。 代碼有什麼問題? 如何解決它?

同樣的事情發生在我自己的代碼中。

在我的情況下,我需要檢查,如果在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 

由於提前, ž

+0

你的代碼沒有意義。 'regex.Test'不存在,你正在檢查'Sub'的返回值。 –

+0

'GetRegEx'這是什麼 – sam092

+0

我說我的代碼是不同的,並且在我的代碼中存在'regex.Test'。第一部分是完整的教程,我想從中理解這些功能。 – ZZA

回答

1

好。我找到了。一個愚蠢的錯誤 - 一個錯字。

您有一個名爲testpattern的變量,另一個名爲pattern

testpattern = "[0-9]{1,3}"應該pattern = "[0-9]{1,3}"代替

同樣,你有stringtotestinputstring。改變這一點以及

+0

你是對的! 我以爲這個教程會按照它的方式工作,並且無法弄清楚。現在我將根據這個重寫自己的代碼,因爲這很好。 謝謝。 – ZZA

+0

爲了避免同樣的錯誤,我建議養成在使用前聲明變量的習慣。這可以通過添加Option Option來強制執行 – sam092

相關問題