2012-02-01 44 views
1

我剛纔把這個regExp函數放在一起檢查一個字符串的內容。該字符串應該只包含數字,字母,fullstops(。),連字符( - ),符號(@)和撇號(')。經典ASP - 正則表達式函數

If Trim(Request("searchStr")) <> "" Then 
    Function validateSearchStr(searchStr) 
     Set regEx = New RegExp 
     regEx.IgnoreCase = True 
     regEx.Pattern = "[\w'[email protected]]" 
     validateSearchStr = regEx.Test(searchStr) 
    End Function 

If NOT validateSearchStr(Trim(Request("searchStr"))) Then 
    Response.Redirect("error/?e=badInput") 
End If 
End If 

但是這似乎沒有做任何事情。我可以輸入所有的字符和符號,錯誤頁面不會觸發。

是否明顯?

+1

@Saurabh - 感謝您的編輯,我忘記了代碼標籤 - oopsie :-p – TheCarver 2012-02-01 06:51:09

回答

4

首先,如果要匹配字符類中的文字連字符,則需要轉義(即反斜槓):regEx.Pattern = "[\w'\[email protected]]"

其次,注意\w也允許下劃線 - 如果你不想使用A-Za-z0-9

第二關,它看起來像validateSearchStr只是測試是否有在字符串匹配正則表達式的任何字符。

所以searchstring'abcasdf#ljasdf'是無效的,但是因爲它匹配[A-Za-z0-9'\[email protected]](例如第一個「a」匹配),所以不會引發錯誤。

我想你應該改爲測試是否有任何非法個字符。即:

regex.Pattern = "[^A-Za-z0-9'\[email protected]]" 

注意^在字符類說「任何字符這些」。

現在regEx.Test將返回TRUE 如果在搜索字符串中存在錯誤的字符。 所以改名validateSearchStrisSearchStrBad做:

If isSearchStrBad(...) Then 
.... 

(請注意,如果你想測試整個字符串是否是有效的正則表達式將必須"^[A-Za-z0-9'\[email protected]]+$]",即確保字符串匹配的每個字符,不只是一個字符)。

+0

我似乎無法得到這個工作。我按照您的建議進行了更改,但仍然可以輸入錯誤的字符。如果我這樣做:[如果isSearchStrBad(str)= False Then]它只會輸入正常字符串失敗。如果我將它更改爲True,它應該在錯誤的字符上失敗,但它不會... – TheCarver 2012-02-01 17:16:48

+0

[這裏](http://regexr.com?2vsvn)是正確的行爲 - 這個想法是,如果任何單個字符與「壞字符」正則表達式匹配,則「regEx.Test」應該返回True。所以正則表達式很好。至於爲什麼代碼不工作 - 我不知道我可以幫你:ASP不是真的我的東西。也許你可以嘗試第二個正則表達式(在行動[這裏](http://regexr.com? 2vsvq))來驗證整個字符串,而不是注意到一個錯誤的字符串?祝你好運! – 2012-02-02 03:29:01