- ベストアンサー
ACCESS VBAでの正規表現チェックについて
- ACCESS VBAで文字の入力チェックを行いたいと思っています。正規表現チェックを使用し、半角英数字と特定の記号以外の文字が入力された場合にエラーメッセージを表示させたいです。
- 現在の処理では、入力許可の文字列が正しく設定されていないため、うまく動作しません。正規表現のチェックに詳しい方に、正確な入力許可文字列の設定方法を教えていただきたいです。
- ACCESS2003での開発を行っているので、VBAを使用しています。質問文章中に示したコードでは、入力文字列が空でない場合にチェック処理が実行されます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
'禁止文字があればTrueを返す。なければFalseを返す。 Function 禁止文字検出(ByVal 文字列) As Boolean Dim R Set R = CreateObject("VBScript.RegExp") R.Global = True R.IgnoreCase = True R.Pattern = "[^a-z\d\_@/!\-\+\*]" 禁止文字検出 = R.Test(文字列) End Function '使用例 If 禁止文字検出(Text) Then MsgBox "エラーです" http://msdn.microsoft.com/ja-jp/library/cc392487.aspx http://msdn.microsoft.com/ja-jp/library/cc392020.aspx
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1415)
>"[_@/!+*-]*"の頭にだけ*がないのは… スミマセン 単なる間違いです。*は必要です。 正しくは"*[_@/!+*-]*"です。
- nda23
- ベストアンサー率54% (777/1415)
せっかく正規表現を使っているのに1文字ずつと言うのは如何なものかと・・・ 種類 = 0 If 入力文字列 Like "*[0-9]*" Then 種類 = 種類 + 1 If 入力文字列 Like "*[A-Z]*" Then 種類 = 種類 + 1 If 入力文字列 Like "*[a-z]*" Then 種類 = 種類 + 1 If 入力文字列 Like "[_@/!+*-]*" Then 種類 = 種類 + 1 戻り値 = 種類 こんな感じです。あと、気になるのは以下の表現です。 >Mid("任意文字列", va_idx%, 1) Mid(任意文字列, va_idx%, 1)が正しいのでは?(任意文字列は変数名)
お礼
ご指摘ありがとうございます。 1点質問なんですが、 "[_@/!+*-]*"の頭にだけ*がないのは何か意味があるのでしょうか?
お礼
回答ありがとうございます。 追加の質問で申し訳ないのですが、上記チェックを行った後、文字を何種類使用しているかのチェックがあります。(1)大文字英語(2)小文字英語(3)半角数字(4)記号の4種類の内任意の文字列に何種類当てはまっているかを数値で返そうと考えています。 例:任意文字列【a1@】 = 3種類 現在までに組んだ処理があるのですが、正直この方法で良いか判断に困っています、処理を記載しますのでご意見・指摘点等をお聞かせ願えないでしょうか? For va_idx% = 1 To Len("任意文字列") Step 1 If Mid("任意文字列", va_idx%, 1) Like "[a-z]" Then If StrComp(Mid("任意文字列", va_idx%, 1), StrConv(Mid("任意文字列", va_idx%, 1), vbUpperCase), 0) = 0 Then 大文字フラグ = 1 Else 小文字フラグ = 1 End If ElseIf Mid("任意文字列", va_idx%, 1) Like "[0-9]" Then 数字フラグ = 1 ElseIf Mid("任意文字列", va_idx%, 1) Like "[_!@+/*-]" Then 記号フラグ = 1 End If Next 戻り値 = 大文字フラグ + 小文字フラグ + 数字フラグ + 記号フラグ