
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
エクエルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
-
vbsでのwebフォームへの入力制限?
-
ダブルクリックで貼り付けた画...
-
vba textboxへの入力について教...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
えくせるのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
VBAでセルの書式を変えずに文字...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAの「To」という語句について
-
VBAでFOR NEXT分を Application...
-
VB.net 文字列から日付型へ変更...
-
【ExcelVBA】5万行以上のデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
この正規表現を教えて!
-
特定の正規表現について教えて...
-
8進エスケープとは
-
【正規表現】コメントアウトさ...
-
正規表現
-
条件にマッチした行数のカウント
-
逆スラッシュを使わずにメタ文...
-
なんで真面目な出会いを求める...
-
正規表現。行頭が○○以外にマッ...
-
Perl 正規表現に関して
-
現在、改行コードを含めた任意...
-
これは大きなお世話ですよね? ...
-
perlで記号除去を行いたいので...
-
正規表現で「高」という文字を...
-
正規表現の o オプションの意味...
-
マッチングアプリで新しくアカ...
-
記号とあらば、1文字でも全て...
-
正規表現-数字
-
何故、日本は未だに数字を3桁...
-
CSVファイルの中で、「 , 」カ...
おすすめ情報