2012-02-01 20 views
1

文字列の内容をチェックするこのregExp関数をまとめました。文字列には、数字、文字、完全ストップ(。)、ハイフン( - )、アットマーク(@)およびアポストロフィ( ')のみを含める必要があります。従来の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

答えて

4

まず、文字クラスのリテラルハイフンに一致させたい場合は、それをエスケープ(つまりバックスラッシュ)する必要があります:regEx.Pattern = "[\w'\[email protected]]"

第2に、\wには、アンダースコアも使用できます。使用しない場合は、A-Za-z0-9を使用します。あなたの文字列その一致あなたの正規表現で任意の文字がある場合

セカンドオフは、それはvalidateSearchStrだけのテストのように見えます。

検索ストリング 'abcasdf#ljasdf'は無効ですが、[A-Za-z0-9'\[email protected]]と一致するため(たとえば、最初の "a"がマッチするなど)、エラーはスローされません。

(違法な)があるかどうかをテストする必要があります。すなわち:「任意の文字しかしこれら」と言う文字クラス内

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

注意^

regEx.Testは、に検索文字列に無効な文字が含まれている場合、TRUE を返します。 だから、isSearchStrBadvalidateSearchStrの名前を変更し、実行します。

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

(あなたが全体文字列が有効であるかどうかをテストしたい場合は、あなたの正規表現は、すなわち、"^[A-Za-z0-9'\[email protected]]+$]"する必要があり、文字列の一致の確認すべての文字になるだろう、 1文字だけではない)。

+0

私はこの作業を得ることができないようです。私はあなたが示唆したように変更を加えましたが、私はまだ悪い文字を入力することができます。私がこれをすると、[If isSearchStrBad(str)= False Then]通常の文字列を入力するだけで失敗します。私がそれをTrueに戻すと、それは悪い文字では失敗するはずですが... – TheCarver

+0

[Here](http://regexr.com?2vsvn)は、正規表現で動作します。文字が "bad character"正規表現と一致すると、 'regEx.Test'はTrueを返します。だから正規表現は問題ありません。なぜコードが動作しないのかについては、私はあなたを助けることができるとは思っていません:(ASPは本当に私のものではありません。おそらく、あなたは2番目の正規表現を試すことができます(ここでは(http://regexr.com? 2vsvq))を使用して、文字列全体を検証し、不正な文字列に気付くのではなく、幸運を祈る! –