やじゅ@アプリケーション・ラボ わんくま支局

目次

Blog 利用状況

ニュース

プロフィール

MSMVP

IsDate関数における注意点

日付型をチェックするIsDate関数ですが、日付型だからといって
入力チェックをIsDate関数のみで行っていると抜けがでます。

MSDNの説明によると「IsDate 関数は、指定した式が日付型 (Date) である場合、または日付型 (Date) に変換可能な文字列である場合は、True を返します。それ以外の場合は、False を返します。」

この"変換可能な文字列"が抜けの基です。

For i = 32 To 127
Str = "2007/04/3" & Chr(i)
If IsDate(Str) = True Then
Console.Write (Str & ":" & i)
End If
Next

下記が、IsDate関数で「True」として返ってきます。
2007/04/3 :32 半角スペース
2007/04/3,:44
2007/04/3.:46
2007/04/30:48
2007/04/3H:72
2007/04/3Z:90
2007/04/3h:104
2007/04/3z:122

※追記、数値チェックのIsNumeric関数にも同様な問題があります。
参照:http://homepage1.nifty.com/rucio/main/technique/InputChk2.htm

投稿日時 : 2007年4月30日 0:13

コメントを追加

# re: IsDate関数における注意点 2007/04/30 1:36 Ognac

このパターンはノーマークでした。抜けてますは!

# re: IsDate関数における注意点 2007/04/30 5:18 まさる

知らんかったす・・・

# re: IsDate関数における注意点 2007/04/30 13:59 Moo

IsNumericにも同様の罠が潜んでいます

ヒント:"3e-4"

# re: IsDate関数における注意点 2007/05/01 1:09 やじゅ

IsNumericも確かにそうですね、
あとで追記しておきます。

タイトル
名前
URL
コメント