アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在VB6.0の勉強をしております。

すごく初歩的な質問だとは思いながらも、自分で調べられなかったので質問させてください。
テキストボックスに入力された文字列に許可文字以外が入力された場合にエラーとしたいのですが、方法が分かりません。
C言語の用に文字列を添え字指定でループ出来れば良いんですが、VBだと、どのように行うのでしょうか?

一応自分で調べ、似たような質問を見つけたんですが、私の場合は禁止文字が多すぎるので、それを一つずつチェックするのは無謀かなと思いまして・・・・。
http://oshiete1.goo.ne.jp/qa2174793.html

ちなみに許可文字は、半角カタカナと'0'~'9'と'A'~'Z'です。
それ以外の文字が含まれている場合はエラーにしたいです。

どうかよろしくお願いいたします。

A 回答 (6件)

>「正規表現」の部分は「変数」という意味なんでしょうか?


変数名や関数名を漢字にしただけです。お好みで変えてもらって
結構です。
>のような感じでしょうか?
そうです。
>はやはり分けて記載すべきですか?
分けて記載すると正しく動作しません。禁止文字(検出パターン)は
同時に記述しなければなりません。
>「*」や「-」もパターン指定したい
「正規表現の構文」見ました?書いてあるんだけどね・・・
(1)[xyz] x 、 y 、 z のいずれかと一致する
(2)[^xyz] x 、 y 、 z のいずれとも一致しない
 今回はこのパターンで"\d"(数字)、"A-Z"(A~Z)、"。-゜"(半角カナ)
 という具合で、否定の^があるから、いずれにも該当しない文字を
 検索するという意味です。
(3)\(バックスラッシュ)は特殊文字をエスケープします。
 「*」と[ ] 内の「-」は特殊文字なので、エスケープが必要です。

と、ここまで書けば正解を書けますよね?
分けて記載するとオカシくなる原因も理解できましたか?
VB6なんだからデバッガでいろいろ試してみて、体で覚えるのが
一番です。

オマケ:"[^\dA-Z。-゜\*\-]"
    • good
    • 1
この回答へのお礼

ご丁寧にありがとうございますm(__)m

「正規表現の構文」見たんですが、いまいち理解出来なくて・・・
詳細に記載していただきありがとうございます!

オマケも参考にさせていただきます。
本当にありがとうございました。

お礼日時:2008/12/10 16:22
    • good
    • 0
この回答へのお礼

拝見させていただきました。

参考にさせていただきます。
ありがとうございましたm(__)m

お礼日時:2008/12/10 16:27

テキストボックスの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氏の回答を引用しています
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

出来れば、フォーカスロストでのチェックは行いたくないので、参考にさせていただきます。
参照設定の記載はとても参考になります。
ありがとうございました。

お礼日時:2008/12/10 14:01

正規表現を使うと簡単です。


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 …
http://msdn.microsoft.com/ja-jp/library/cc392020 …

この回答への補足

ご回答ありがとうございます。

丁寧に記載していただき、とてもありがたいんですが、「正規表現」の部分は「変数」という意味なんでしょうか?
実際に記載してみました↓

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

補足日時:2008/12/10 13:50
    • good
    • 0

リアルタイムではなく、入力後でよいのなら、正規表現のマッチングを利用すればいいのでは?

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

初心者なもので、「正規表現のマッチング」が何のことやらちんぷんかんぷんですorz

調べてみます。ありがとうございました。

お礼日時:2008/12/10 13:49

以下のページが参考になると思います。



http://homepage1.nifty.com/rucio/main/Samples/vb …

この実装方法は、テキストボックスにキープレスイベントを実装し、
その中で押されたキーを判定するものです。
指定されたキーでなければテキストボックスに入力されません。

サンプルを参考に、半角英数と半角カタカナ、それと
文字を削除するためのバックスペースを許可キーにして下さい。

※この方法ではコピー&ペーストで貼り付けられたデータに対して
チェックを行うことができません。
最終的に1文字ずつチェックする仕組みを作成するか、
貼り付けを禁止するコントロールを作成するか、
その他なんらかの対策は必要になると思います。

この回答への補足

ご回答ありがとうございます。

申し訳ございません、私の説明不足なのですが、チェックはコマンドボタン押下時に行いたいです。

入力そのものを不可能にするのではなく、入力された後で、文字列中の全ての文字に対してチェックを行いたいと思っております。

URLはとても参考になります。
ありがとうございました。

補足日時:2008/12/10 12:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A