[三流君] −−>
[ASPで遊ぶ、失敗する] −−>
[バックナンバー一覧]
−−> No.048 IsXXXXの処理でいろいろと遊んでみた(笑)
IsXXXXの処理でいろいろと遊んでみた(笑)
本文(発行内容)
<IsXXXXの処理でいろいろと遊んでみた(笑)>
こんにちは、三流プログラマーのKen3です。
今回は、IsEmptyやIsDate、そんなチェック関係の処理で遊んでみます。
タイトルいろいろなとなっているけど、数パターンです(笑)
※誇大タイトルかなぁ
拾い読みして、何かの参考となれば幸いです。
/*
* 1.IsEmptyでデータチェック
*/
変数が初期化されているか、されていないかを
IsEmpty関数でチェックできます。
[No.5 IsEmptyでデータチェック ]
http://www.ken3.org/backno/backno_asp02.html#5
で、パラメータの受取りのチェック処理を軽く書いてます。
使い方は簡単で、IsEmpty(変数)でTrue/Falseの戻り値で判断します。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>IsEmpty関数でデータのチェック</title>
</head>
<body>
<!-- Ken3 --><!-- #include file="info.inc" -->
<h2>IsEmpty関数でデータのチェック</h2>
Request.QueryString("DATA")をチェックすると、、、<br>
<%
'IsEmptyで変数をチェックする
If IsEmpty(Request.QueryString("DATA")) = True Then 'DATAが無しの時
Response.Write "DATAパラメータを受取れませんでした"
Else
Response.Write "受取ったパラメータは["
Response.Write Request.QueryString("DATA") & "]です"
End If
%>
<HR>
パラメータ無し<A href="test048-1.asp">test048-1.asp</a><br>
パラメータあり<A href="test048-1.asp?DATA=ABC">test048-1.asp?DATA=ABC</a><br>
項目DATAはあり<A href="test048-1.asp?DATA">test048-1.asp?DATA</a><br>
<br>
</body>
</html>
-------
If IsEmpty(Request.QueryString("DATA"))のチェックで
http://www.ken3.org/cgi-bin/test/test048-1.asp
http://www.ken3.org/cgi-bin/test/test048-1.asp?DATA=ABC
はあり/なしなので、想像つきやすいですよね、
問題は、
http://www.ken3.org/cgi-bin/test/test048-1.asp?DATA
と項目だけあった場合どうなるでしょう?
私もわからなかったので、やってみたらFalseで
受取ったパラメータは[]ですと表示されました。
xxx.asp?MODE=DELETE&NO=123
とやらずに
xxx.asp?DELETE&NO=123
として、xxx.asp側でIsEmptyを使用して判断するのもありかなぁ
※好みの問題だけどね
あっ、せっかく作った表示のツール使おう
http://www.ken3.org/cgi-bin/tools/look.asp?MODE=DELETE&NO=123
とここまでは、普通、
http://www.ken3.org/cgi-bin/tools/look.asp?DELETE&NO=123
でテストすると、あれ?項目名がおかしいよ。
http://www.ken3.org/cgi-bin/tools/look.asp?ADD=&NO=777&USERID=Ken3
なんてテストすると、いろいろと処理の感じがつかめるかも。
データチェックや渡し方、、、奥が深そうな予感、、、
/*
* 2.何に使うの? IsArray関数 , IsObject関数
*/
よくわからなかったのが、
IsArray関数 , IsObject関数
の2つ。
IsNull関数は、変数の中身がNullを表しているかのチェックなのでわかるけど、
IsArray関数 変数が配列か?
IsObject関数 変数がOBJECT変数か?
この2つはテストの例題が浮かばなかった。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Function関数やSub関数の引数チェックに使うのかなぁと思いつつ、
かるく触れただけでサヨナラです(思いついたらまた発行します)
/*
* 3.IsDate関数で変換可能か調べ、CDate関数で変換、DateAddで遊ぶ
*/
IsDate関数は式を日付に変換可能かチェックする関数です。
チェック後に変換可能ならCDate関数を使用して変換し、
DateAdd関数を使って+−してみます。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>IsDate関数で変換可能か調べ、CDate関数で変換、DateAddで遊ぶ</title>
</head>
<body>
<!-- Ken3 --><!-- #include file="info.inc" -->
<h2>IsDate関数で変換可能か調べ、CDate関数で変換、DateAddで遊ぶ</h2>
受取ったパラメータは<br>[<%=Request.QueryString("DATA")%>]<br>
<%
'IsDateで変数をチェックする
If IsDate(Request.QueryString("DATA")) = True Then '変換可能な時
DATA = CDate(Request.QueryString("DATA"))
Response.Write "CDateの結果は" & DATA & "です<br>"
Response.Write "3日後は、" & DateAdd("d", 3, DATA) & "です<br>"
Response.Write "1ヶ月前は、" & DateAdd("m", -1, DATA) & "です<br>"
D = Request.QueryString("DATA") 'パラメータをそのまま
Else '変換不可の時
Response.Write "を日付に変換することはできません"
D=Date() '現在日付を代入
End If
%>
<HR>
<FORM ACTION="test048-2.asp" METHOD="GET">
変換したい日付文字列
<INPUT TYPE="text" SIZE="30" NAME="DATA" VALUE="<%=D%>">
<INPUT TYPE="submit" VALUE="変換テスト"><br>
↑いろいろと遊んでみてください↑
</FORM>
<br>
</body>
</html>
http://www.ken3.org/cgi-bin/test/test048-2.asp?DATA=2003-04-10
http://www.ken3.org/cgi-bin/test/test048-2.asp?DATA=04-15
http://www.ken3.org/cgi-bin/test/test048-2.asp?DATA=2000.4.1
http://www.ken3.org/cgi-bin/test/test048-2.asp?DATA=ABC
など、あとは、テキストボックスに入れて気になる日付書式をテストしてください。
/*
* 4.IsNumeric関数 でチェック
*/
IsNumeric関数で式が数値を表せるかチェックするのかぁ・・
その後、CIntとFormatNumber関数で遊んでます。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>IsNumeric関数で変換可能か調べ、CInt関数,FormatNumber関数を使う</title>
</head>
<body>
<!-- Ken3 --><!-- #include file="info.inc" -->
<h2>IsNumeric関数で変換可能か調べ、CInt関数,FormatNumber関数を使う</h2>
受取ったパラメータは<br>[<%=Request.QueryString("DATA")%>]<br>
<%
'IsNumericで変数をチェックする
If IsNumeric(Request.QueryString("DATA")) = True Then '変換可能な時
DATA = CInt(Request.QueryString("DATA"))
Response.Write "CInt()の結果は" & DATA & "です<br>"
DATA = FormatNumber(Request.QueryString("DATA"), 2)
Response.Write "FormatNumber(XX,2)の結果は" & DATA & "です<br>"
Else '変換不可の時
Response.Write "を数値に変換することはできません、確認してね"
End If
D = Request.QueryString("DATA") 'パラメータをそのまま保存
%>
<HR>
<FORM ACTION="test048-3.asp" METHOD="GET">
数値に変換したい文字列
<INPUT TYPE="text" SIZE="30" NAME="DATA" VALUE="<%=D%>">
<INPUT TYPE="submit" VALUE="変換テスト"><br>
↑いろいろと遊んでみてください↑<br>
※123456とInt以上を入れてオーバーフローを発生させたりして遊んでね
</FORM>
<br>
</body>
</html>
テストパターンは適当に、
http://www.ken3.org/cgi-bin/test/test048-3.asp?DATA=1234
http://www.ken3.org/cgi-bin/test/test048-3.asp?DATA=12.5
http://www.ken3.org/cgi-bin/test/test048-3.asp?DATA=12.567
http://www.ken3.org/cgi-bin/test/test048-3.asp?DATA=12g (12グラムのつもり)
http://www.ken3.org/cgi-bin/test/test048-3.asp?DATA=1,234 (カンマを付けて)
チョットビックリは、
http://www.ken3.org/cgi-bin/test/test048-3.asp
のパラメータ無しが0になる(IsNumericを通過する)ことです
http://www.ken3.org/cgi-bin/test/test048-3.asp?DATA=+ (+はスペースの意味)
のスペースは変換できないと判断するのだが、、、
あとはお約束のオーバーフロー、
http://www.ken3.org/cgi-bin/test/test048-3.asp?DATA=123456
をテストすると、
受取ったパラメータは
[123456]
Microsoft VBScript 実行時エラー エラー '800a0006'
オーバーフローしました。: 'CInt'
/cgi-bin/test/test048-3.asp, 行 13
あらら、情けないねぇ(笑)
いろいろと変換や自動的な四捨五入など、変換・チェックを試してみて下さい。
/*
* 5.終わりの挨拶 </HTML>
*/
今回は、
IsXXXXXの関数でチェックするパターンを少し書きました。
ポイントは、
・変換前にチェックを行ってみましょう
・IsNumericは数値のチェックなのでIntのオーバーフローまではチェックできない
ぐらいかなぁ。
まぁ、少し不安だけど、なんとかなるかなぁ。
素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。
掲示板 : http://www.ken3.org/asp/bbs-asp.html
ASP、VBScript勉強中の三流プログラマーのKen3でした。
----------------------------------
関連項目(ただのバックナンバー紹介)
----------------------------------
[No.5 IsEmptyでデータチェック ]
http://www.ken3.org/backno/backno_asp02.html#5
で、パラメータの受取りのチェック処理を軽く書いてます。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告