VB6.0で正規表現(RegExp)を使用し、以下のようなことをしたいのですがやり方がわかりません。
他の方法ではなく正規表現で行いたいのです。
桁数4桁と設定されているが4桁未満でも構わないです。[0-9A-Z]
5桁以上入ることありません
正しく0-9,A-Zであり桁数が減るの問題なのですが、記号が入ると正常で通ってしまいます。
0A1B→OK
0A1 →OK
0A →OK
0 →OK
0A1@→NG
0A* →NG
0 →NG
+A1B→NG
・
・
・
つまり36進数みたいなことをやりたいということなのでしょうか。
まずは自分のコードを書いてもらわないと、
どこが間違っているのか答えようがありません・・・。
今の状態は、
objReg.Pattern = "[0-9A-Z]{1,4}"
If objReg.Test(strCheck) = False Then
で行っていますが、0-9,A-Zの範囲で4桁未満は正常に通るのですが、
途中に記号が入っても正常で通ってしまいます。
タイトルに誤り
誤:正義表現 正:正規表現
回答では無いので申し訳ないのですが、VB6.0に正規表現によるパターンマッチは今まで無かったと思っていたのですけど、やっぱりあるのでしょうか?
MSDNで”RegExp”などを検索しても見当たらないのですがRegExpの使い方を教えてもらえませんでしょうか?
(JavaScriptとPerlの正規表現の使い方は知っているのですけど)
>Y2さん
そういうDLLがあるので、それを使えばどんな言語でも使えますよ。
クラスとしても作れなくはなさそうですけど、それは使い物になるかどうかは別です^^;
"BRegExp"と入れて(他には何も入れないで)検索してみてください。
きっとDLLのページが先頭に出てくるでしょう。
ちなみにVBでは、ワイルドカード比較なので、上よりちょっと低機能ですけど、
Like演算子をうまく使えば、結構正規表現っぽいことができます。
今日 Like *日 = True 見たいな感じに使うものだったはず。
>Y2さん
VB6.0でも正規表現は使用できます。
参照設定でMicrosoft VBScript Regular Expressions 5.5を選びます。
IE5.5以上でなければいけません5.0でもいいようなことがどかのHPにあった気がしますが、5.5以上がよいと思われます。
質問の件
objReg.Pattern = "[0-9A-Z]{1,4}"
だと1回以上4回以内マッチ(?)になるみたいですね。
桁数4桁以内でのチェックが出来ません。
5桁以上:エラー
0-9A-Zの範囲で4桁以内:正常
4桁以内で途中に記号:エラー
正規表現でやるのは無理なのでしょうか・・・。
それであってると思いますよ。
記号があってはいけないという指定もないわけですし、
途中に0-9かA-Zが一文字でもあれば、
[0-9A-Z]{1,4} //(0-9とA-Zの1文字以上)
という条件には一致します。
"A*"としても最初の"A"だけで一致するので、
Trueになります。
なので、この場合は
[^0-9A-Z]を使って
指定文字以外が検出されればエラーということもしないといけないと思います
objReg.Pattern = "[0-9A-Z]{1,4}"
If objReg.Test(strCheck) = True Then
objReg.Pattern = "[^0-9A-Z]"
If objReg.Test(strCheck) = True Then
'エラー
といった感じになるんですかね。
小文字はどうするかも必要ですけど。
いきなり"(.*[^0-9A-Z].*)"で検索して、
記号や小文字があり次第、即エラーのほうがいいのかな。
これでどうでしょう?
Loreleyさんありがとうございます。
解決できました。
なるほどー、外部のライブラリを使うわけですね。
参考になります。(^Д^)/
MSDNでの独学が多いので、ここの掲示板の情報は結構価値が高いです。
ツイート | ![]() |