![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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:
No.2ベストアンサー
- 回答日時:
Option Explicit
Public Function RegExpCheck(ByVal ChkString As String, _
ByVal RegPattern As String) As Boolean
'(一部省略)
'引数:ChkString 正規表現確認対象文字
' RegPattern パターン
'戻り値:True マッチしている
' :False マッチしていない、あるいは文字・パターンが空白
'(一部省略)
Dim reg As Object
Set reg = CreateObject("vbscript.regexp")
RegExpCheck = False
On Error GoTo RegErr
'引数空白チェック・・・空白の場合はFalseを返す
'対象文字列
If Trim$(ChkString) = vbNullString Then
RegExpCheck = False
Exit Function
End If
'パターン
If Trim$(RegPattern) = vbNullString Then
RegExpCheck = False
Exit Function
End If
reg.Pattern = RegPattern
If reg.Test(CStr(ChkString)) = True Then
RegExpCheck = True
Else
RegExpCheck = False
End If
RegErr:
End Function
Sub hoge()
MsgBox (RegExpCheck("33.3", "^\d{1,2}\.\d$|^\d{1,2}$"))
End Sub
'VBA+VBScriptの助けを借りて検証してみたが正規表現自体が誤り。
'.はメタ文字なのでエスケープしないといけない
'また,\d{1,2}は333の中に含まれるので
'それだけをヒットさせたいときは
'行頭と行末ではさむ必要がある
ポイントは
(1)行頭を^
(2)行末を$
(3).はメタキャラクターなので\をつけてエスケープするということですね。
実際にパターンを変えたらできました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現
-
正規表現について
-
文字列検索時違う文字でマッチ...
-
シェルスクリプト [[ $number =...
-
正規表現。行頭が○○以外にマッ...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
CSVの定義
-
英数字のみ全角から半角に変換
-
住宅にカナを入力する際に丁目...
-
スペースで区切られた氏名から...
-
csvデータ ダブルクォーテ...
-
EXCELからCSVにすると余計なカ...
-
マクロを使ってフォルダー内に...
-
Excel VBAでPDFファイルをMicro...
-
csvデータのダブルクォーテーシ...
-
各項目がダブルクォーテーショ...
-
文字コードの%E3%80%とは何です...
-
CString から LPCTSTRの型に変換
-
IEからEdgeへの移行に伴うIMEの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 URL抽出「 [\\/\\b]{0...
-
シェルスクリプト [[ $number =...
-
正規表現について
-
正規表現について VB6
-
正規表現で2種類ある括弧を区別...
-
日本語環境下でのバックスラッ...
-
perl初心者です。
-
perlの正規表現で量指定子を繰...
-
言語ではなく、正規表現のみで...
-
正規表現の展開
-
pythonの正規表現、全角カタカ...
-
正規表現
-
正規表現について教えてください
-
正規表現が解読できません。
-
正規表現。行頭が○○以外にマッ...
-
行末の正規表現について。
-
配列内の要素をパターンマッチする
-
正規表現-数字
-
小文字から大文字への変換後の...
-
「?」が含まれるマッチについて
おすすめ情報