ACCESS VBAでの正規表現チェックについて

このQ&Aのポイント
  • ACCESS VBAで文字の入力チェックを行いたいと思っています。正規表現チェックを使用し、半角英数字と特定の記号以外の文字が入力された場合にエラーメッセージを表示させたいです。
  • 現在の処理では、入力許可の文字列が正しく設定されていないため、うまく動作しません。正規表現のチェックに詳しい方に、正確な入力許可文字列の設定方法を教えていただきたいです。
  • ACCESS2003での開発を行っているので、VBAを使用しています。質問文章中に示したコードでは、入力文字列が空でない場合にチェック処理が実行されます。
回答を見る
  • ベストアンサー

ACCESS VBAでの正規表現チェックについて

いつもお世話になっています。 現在ACCESS2003で開発を行っているのですが、文字の入力チェックで悩んでいます。 正規表現チェックを使用し 半角英数字と"-", "_", "!", "@", "+", "/", "*"以外の文字が入力されればエラーメッセージを表示させようとしているのですが、うまく動作しません。 ●現在の処理 '検証結果フラグ b_error = True '入力許可文字列 s_ok_text = "*[”正規表現”]*" '入力文字列が空で無い場合はチェック処理を実行する If Not IsNull(”入力文字”) Then If ”入力文字” Like s_ok_text Then '入力許可文字列以外が含まれていた場合はエラーを返す b_error = False End If End If s_ok_textに入力可能文字を設定しているのですが、上記入力許可文字の設定の仕方がわからない状況です。 正規表現のチェックに詳しい方がいましたら、上記チェックの方法をご教授頂きたく思います。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

'禁止文字があれば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

gi03158
質問者

お礼

回答ありがとうございます。 追加の質問で申し訳ないのですが、上記チェックを行った後、文字を何種類使用しているかのチェックがあります。(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 戻り値 = 大文字フラグ + 小文字フラグ + 数字フラグ + 記号フラグ

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>"[_@/!+*-]*"の頭にだけ*がないのは… スミマセン 単なる間違いです。*は必要です。 正しくは"*[_@/!+*-]*"です。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

せっかく正規表現を使っているのに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)が正しいのでは?(任意文字列は変数名)

gi03158
質問者

お礼

ご指摘ありがとうございます。 1点質問なんですが、 "[_@/!+*-]*"の頭にだけ*がないのは何か意味があるのでしょうか?

関連するQ&A

  • Rubyにおける正規表現(一致しない)

    Rubyを使って、テキスト処理をやっています。 どうしても、うまく行かないところがあります。 サジェスチョンをお願いします。 正規表現にて、 2つの条件フラグが成立していて、かつ、特定の文字列を含まないという条件です。 1行の内容は、textに入っています。 if (myFlag1==1) && (myFlag2==1) && (!/abc def/) then xxxxxxxx end (!/abc def/)は、perlでの表現です。Rubyでは、少なくとも (!/abc def/=~text) かな、と考えましたが、ダメでした。 (/abc def/!=text) でも、だめでした。 宜しくお願いいたします。

  • 正規表現-数字

    VB6で開発しています。 ひとつのテキストボックスがあり(MAXLENGTHが4)、 半角数字or小数点しか入力できないように制御しています。 下記正規表現確認関数で、 00.0~99.9の値のみ認証したいのですが、 (チェック前に Format( XX , '00.0')に変換してます) ○ 3 ○ 3.3 ○ 33 ○ 33.3 × 3.33 × .333 × 333 △ 3.00 → 3.0に変換させる パターンマッチング (\d{1,2}.\d|\d{1,2})ですと 本来×の333がOKとなってしまいます。 正規表現が間違っているのでしょうか? アドバイスお願いします。 関数はこちら Public Function RegExpCheck(ByVal ChkString As String, _ ByVal RegPattern As String) As Boolean '(一部省略) '引数:ChkString 正規表現確認対象文字 ' RegPattern パターン '戻り値:True マッチしている ' :False マッチしていない、あるいは文字・パターンが空白 '(一部省略) Dim reg As New RegExp RegExpCheck = False On Error GoTo RegErr '引数空白チェック・・・空白の場合はFalseを返す '対象文字列 If Trim$(ChkString) = vbNullString Then Exit Function End If 'パターン If Trim$(RegPattern) = vbNullString Then Exit Function End If reg.Pattern = RegPattern If reg.Test(CStr(ChkString)) = True Then RegExpCheck = True End If Exit Function RegErr:

  • 正規表現について

    任意の文字は「.」であらわされるようですが、とほほさんのサイトによると、\nは除いた任意の文字とあります。\nも含んだ任意の文字はどう表現すればいいのでしょうか? .|\n でいいんでしょうか? テキストファイルを$dataに読み込み、<start>と<end>にはさまれた改行を含む文字列を取得しようと、 if($text =~ /<start>(.*)<end>/){  print $1; } としたのですが、if文に引っかかりません。さらに、 if($text =~ /<start>([.\n]*)<end>/){  print $1; } かな?と思いましたがこれもできませんでした。 何かいい方法はないでしょうか?

    • ベストアンサー
    • Perl
  • 正規表現

    正規表現で 数値と半角記号(!#$%()~|-^@[;],./`{+*}_)が入っているというものを表現したいのですが、、、 下記のような正規表現をすると、エラーになってしまいます。何かよい方法はありませんか? ^[a-zA-Z0-9\-_!#$%()~|-^@[;],./`{+*}_]*$ 又、携帯電話のチェックをしたいのですが、 1文字以上の文字列があってというような処理にしたいのですが、何かよい方法はないでしょうか? ereg( "@docomo\.ne\.jp$", $email )

    • ベストアンサー
    • PHP
  • 正規表現で入力チェックするには。

    正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。 [0-9a-zA-Z]で英数字はチェックする事ができたんで下記の特殊文字を指定するとエラーになってしまい困っています。 「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」 ロジックは以下のように記述しています。 Pattern p = Pattern.compile("[0-9a-zA-Z!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./]"); Matcher m = p.matcher("文字列"); if(m.matches() == true){   System.out.println("1"); } else{   System.out.println("2"); } ※「\」と「"」はエスケープしています。 下記のエラーメッセージが表示されてなんとなくですが正規表現でエラーになっているのはわかるんですが・・・ Illegal character range near index 32 [0-9a-zA-Z!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]                       ^ 申し訳ありませんがアドバイスいただけませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • これは正規表現とは言えないでしょうか?

    正規表現を勉強しようと思っているのですが まずはじめに確認させて下さい。VBAです。 Sub 正規表現() If a Like "*a*" Then End If End Sub は正規表現とは言えないでしょうか? *を使っているからそう思いました。 Dim re As RegExp Set re = New RegExp を使わないと、正規表現といえないのでしょうか? よろしくお願い致します。

  • PHPでメールアドレスをチェックする正規表現はどのように書いたらいいのでしょうか...

    PHPでメールアドレスをチェックする正規表現はどのように書いたらいいのでしょうか? ネットで検索して利用しましたがうまくいきませんでした。 例えば入力が aaa × aaa@ × aaa@s × aaa@s. × aaa@s.u ○ という正規表現が目標です もちろんRFCの基準に適応した文字列を考えています。 半角記号、半角英数字、半角英字がOKですよね・・。 教えてください。

    • ベストアンサー
    • PHP
  • VBScript 正規表現で入力された値を判定する

    初めまして。現在VBScriptでプログラムを組んでいるのですが、 どうしても詰まってしまいましたので、ご教授お願いします。 内容は、textboxに入力された値(textbox)を正規表現を用いて 半角数字のみtrue、数字以外の文字が含まれている場合はfalseを返したいと思っています。 if moji_check(textbox)=false then response.write "数字以外が入力されました。<br>"  else      Session("hensuu") = textbox end if function moji_check(strLen) if strLen.pattern("[^0-9]") then moji_check = true else moji_check = false end if end function という風に書いてみたのですが、実行してみると if strLen.pattern("[^0-9]") then 部分のstrLenがオブジェクトが無いと エラーが吐かれてしまいます。 このような場合の対処法を調べてみたのですが、プログラミング自体が不慣れなため わかりませんでした。 よろしくお願いいたします。

  • 正規表現を使った入力値のチェック

    こんにちは、yukimura1024です。 perlでブラウザのフォームに入力された値をチェックしたいのですが、 入力された値が「全角文字のみか」と「全角カタカナのみか」 という2種類のチェックのしかたがわかりません。 「数値のみか」のチェックは正規表現を使ってできたのですが、 これと同じように正規表現を使って、この2つの全角チェックをする 方法はないでしょうか? 数値チェックは以下の方法でやっています↓ if ($str_txt_yuubin =~ /[^0-9]/) { print "「郵便番号」を半角数字で入力してください。<br>\n"; } ご存知の方がいましたら教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 正規表現 Bシェル

    Bシェルの正規表現を教えてください。 ある文字列の中に英数大文字、小文字、コンマ、ピリオド、アンダーバー、ハイフン以外が含まれていないかをチェックしたいです。以下のようにすると文字列LINEの先頭にあるとチェックできるのに、中にあると出来ません。教えてください。 if expr \"$LINE\" : [^a-zA-Z0-9\\,\\.\\_\\-] >/dev/null ; then echo \"チェックNG 使用不可能な文字が入っています。 ${LINE}\" >> ${LOG_FILE} else echo \"チェックOK ${LINE}\" >> ${LOG_FILE} fi

専門家に質問してみよう