電子書籍の厳選無料作品が豊富!

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:

A 回答 (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の中に含まれるので
'それだけをヒットさせたいときは
'行頭と行末ではさむ必要がある
    • good
    • 0
この回答へのお礼

ポイントは
(1)行頭を^
(2)行末を$
(3).はメタキャラクターなので\をつけてエスケープするということですね。

実際にパターンを変えたらできました。

ありがとうございます。

お礼日時:2007/08/17 15:29

正規表現では、.は\n以外の全ての文字にマッチします。


ですので、質問者さんの表現では、3333もOKになると思います。

Format関数を通していて必ず小数点以下が入るのなら、
(\d{1,2}\.\d)
で大丈夫だと思うのですが…
    • good
    • 0
この回答へのお礼

No.2さんの解答で通りました。
tqpさんのアドバイスも参考にさせていただきました。
ありがとうございました。

お礼日時:2007/08/17 15:30

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