- ベストアンサー
禁止文字チェック
現在VB6.0の勉強をしております。 すごく初歩的な質問だとは思いながらも、自分で調べられなかったので質問させてください。 テキストボックスに入力された文字列に許可文字以外が入力された場合にエラーとしたいのですが、方法が分かりません。 C言語の用に文字列を添え字指定でループ出来れば良いんですが、VBだと、どのように行うのでしょうか? 一応自分で調べ、似たような質問を見つけたんですが、私の場合は禁止文字が多すぎるので、それを一つずつチェックするのは無謀かなと思いまして・・・・。 http://oshiete1.goo.ne.jp/qa2174793.html ちなみに許可文字は、半角カタカナと'0'~'9'と'A'~'Z'です。 それ以外の文字が含まれている場合はエラーにしたいです。 どうかよろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>「正規表現」の部分は「変数」という意味なんでしょうか? 変数名や関数名を漢字にしただけです。お好みで変えてもらって 結構です。 >のような感じでしょうか? そうです。 >はやはり分けて記載すべきですか? 分けて記載すると正しく動作しません。禁止文字(検出パターン)は 同時に記述しなければなりません。 >「*」や「-」もパターン指定したい 「正規表現の構文」見ました?書いてあるんだけどね・・・ (1)[xyz] x 、 y 、 z のいずれかと一致する (2)[^xyz] x 、 y 、 z のいずれとも一致しない 今回はこのパターンで"\d"(数字)、"A-Z"(A~Z)、"。-゜"(半角カナ) という具合で、否定の^があるから、いずれにも該当しない文字を 検索するという意味です。 (3)\(バックスラッシュ)は特殊文字をエスケープします。 「*」と[ ] 内の「-」は特殊文字なので、エスケープが必要です。 と、ここまで書けば正解を書けますよね? 分けて記載するとオカシくなる原因も理解できましたか? VB6なんだからデバッガでいろいろ試してみて、体で覚えるのが 一番です。 オマケ:"[^\dA-Z。-゜\*\-]"
その他の回答 (5)
- fujillin
- ベストアンサー率61% (1594/2576)
#1です。 正規表現については、以下あたりをご参考に http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.aspx http://officetanaka.net/excel/vba/tips/tips38.htm http://itpro.nikkeibp.co.jp/article/COLUMN/20070820/279986/ http://codezine.jp/article/detail/1655
お礼
拝見させていただきました。 参考にさせていただきます。 ありがとうございましたm(__)m
- redfox63
- ベストアンサー率71% (1325/1856)
テキストボックスのValidateイベントを活用してみましょう この場合テキストボックスからフォーカスが外れる時点でチェックが機能します 許可しないデータの入力があるとフォーカスの移動を行いません VB6のメニューから プロジェクト > 参照設定で 『Microsoft VBScript Regular Expressions 5.5』を設定します Private sub Text1_Validate(Cancel as Boolean) dim objRegp as New RegExp objRegp.Global = True objRegp.Pattern = "[^\dA-Z。-゜]" Cancel = objRegp.TEst( Text1.Text ) if Cancel then MsgBox "入力が不正です" end if End Sub といった具合で … # 正規表現部分は nda23氏の回答を引用しています
お礼
ご回答ありがとうございます。 出来れば、フォーカスロストでのチェックは行いたくないので、参考にさせていただきます。 参照設定の記載はとても参考になります。 ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
正規表現を使うと簡単です。 Function 不許可文字検出(ByVal 文字列 As String) As Boolean Dim 正規表現 Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.Global = True 正規表現.Pattern = "[^\dA-Z。-゜]" 不許可文字検出 = 正規表現.Test(文字列) End Function 不許可文字検出("A0カ")→False 不許可文字を検出しなかった 不許可文字検出("a0カ")→True 不許可文字を検出した http://msdn.microsoft.com/ja-jp/library/cc392487.aspx http://msdn.microsoft.com/ja-jp/library/cc392020.aspx
補足
ご回答ありがとうございます。 丁寧に記載していただき、とてもありがたいんですが、「正規表現」の部分は「変数」という意味なんでしょうか? 実際に記載してみました↓ Function CheckPermissionStr(ByVal inStr As String) As Boolean Dim seiki Set seiki = CreateObject("VBScript.RegExp") seiki.Global = True seiki.Pattern = "[^\dA-Z。-゜]" CheckPermissionStr = seiki.Test(inStr) End Function 上記関数の使い方 If CheckPermissionStr(コントロール.Text) Then 不許可文字を検出した場合の処理(エラー)の処理 Else 不許可文字を検出しなかった場合(正常)の処理 のような感じでしょうか? また、パターン指定ですが、半角カタカナと'0'~'9'と'A'~'Z' はやはり分けて記載すべきですか? あと、「*」や「-」もパターン指定したいんですが、どのように記載すれば良いのか教えていただけないでしょうか? 分からない事だらけで質問してしまいすいませんm(__)m
- fujillin
- ベストアンサー率61% (1594/2576)
リアルタイムではなく、入力後でよいのなら、正規表現のマッチングを利用すればいいのでは?
お礼
ご回答ありがとうございます。 初心者なもので、「正規表現のマッチング」が何のことやらちんぷんかんぷんですorz 調べてみます。ありがとうございました。
- Splatter
- ベストアンサー率41% (181/440)
以下のページが参考になると思います。 http://homepage1.nifty.com/rucio/main/Samples/vbsample030.htm この実装方法は、テキストボックスにキープレスイベントを実装し、 その中で押されたキーを判定するものです。 指定されたキーでなければテキストボックスに入力されません。 サンプルを参考に、半角英数と半角カタカナ、それと 文字を削除するためのバックスペースを許可キーにして下さい。 ※この方法ではコピー&ペーストで貼り付けられたデータに対して チェックを行うことができません。 最終的に1文字ずつチェックする仕組みを作成するか、 貼り付けを禁止するコントロールを作成するか、 その他なんらかの対策は必要になると思います。
補足
ご回答ありがとうございます。 申し訳ございません、私の説明不足なのですが、チェックはコマンドボタン押下時に行いたいです。 入力そのものを不可能にするのではなく、入力された後で、文字列中の全ての文字に対してチェックを行いたいと思っております。 URLはとても参考になります。 ありがとうございました。
お礼
ご丁寧にありがとうございますm(__)m 「正規表現の構文」見たんですが、いまいち理解出来なくて・・・ 詳細に記載していただきありがとうございます! オマケも参考にさせていただきます。 本当にありがとうございました。