2011-07-15 12 views
2

これまで私は手動で文字を追加してそのコードを破棄していました。私はもう少し積極的になりたいので、有効な文字以外のすべてを置き換えることになっているこの関数が見つかりました。 私の最初のハードルは、うまくいかないということです。以下のコードは私の完全なテストファイルで、MsgBoxは空白になります。 vbscript関数クリーンな文字列のみ特定の文字を許可する

私の2番目の質問は、パフォーマンスに関するものです。この関数は非常に大きな文字列を処理します。この方法はかなり遅くなりますか?誰も他の何かをお勧めしますか?

Function CleanUp (input) 
     Dim objRegExp, outputStr 
     Set objRegExp = New Regexp 

     objRegExp.IgnoreCase = True 
     objRegExp.Global = True 
     objRegExp.Pattern = "((?![a-zA-Z0-9]).)+" 
     outputStr = objRegExp.Replace(input, "-") 

     objRegExp.Pattern = "\-+" 
     outputStr = objRegExp.Replace(outputStr, "-") 

     CleanUp = outputStr 
    End Function 

    MsgBox (CleanUp("Test")) 

編集:私は愚かだとちょうどそれが何も返さないように起こしていた私は、変数重複が整理しました。それは今働いている。パフォーマンスに関する質問や推奨事項の入力を受け付けます。

答えて

2

さらに簡素化することができます。

objRegExp.Pattern = "[^ \ w +]"

+0

^\ w +の略語を教えてください。 – lovechillcool

+0

パターン内の\ wは、任意の単語文字に一致する文字クラスです。これは[a-zA-Z_0-9]と同じです。 ^は文字列の先頭を示します。このパターンは、文字列の直後の行から始まり、その最後の単語文字または文字列の終わりのいずれかが最初に出現する行の単語文字列と一致します。 – Nilpo

+0

ありがとうございました。 @Nilpo – lovechillcool

2

それはあなたの例のために予想される結果が何であるかを知っているが、多分あなたの代わりにパターンのためにそれを試すことができません。

objRegExp.Pattern =「[^-ZA-Z0-9]」

ご希望の場合

関連する問題