Microsoft ASPの条件分岐のソースコードの書き方

このQ&Aのポイント
  • ASP Scriptで特定の文字列が含まれる場合の処理方法は、If文を使用して判定します。必要なエラーメッセージを表示するために、条件分岐を行います。
  • 特定の文字列が変数に含まれている場合にエラーメッセージを表示するためには、If文と比較演算子を使います。文字列の一部を比較するためには、ワイルドカードを使うことができます。
  • 複数の文字列の中に特定の文字が含まれている場合の処理方法は、複数の条件を組み合わせて判定します。If文の条件に論理演算子を使って、各文字列を比較します。
回答を見る
  • ベストアンサー

Microsoft ASPの条件分岐のソースコード

ISのWEBサーバーでASP Scriptでサイトを昔作ってもらったプログラムソースを参考にしながら 作成にトライしていますが、、ASP Scriptで特定の文字列が含まれる場合の処理方法ですが、 そのソースコードは電話番号の変数名を「tel」としており、この変数に値がない、つまりNULL値であれば、エラーメッセージを出す場合には、以下のような記述になっています If tel = "" Then err_msg = err_msg & "<br>電話番号を入力してください!" Else If get_len(tel) > 15 Then err_msg = err_msg & "<br>T電話番号の文字数が多すぎます!" Else err_msg = err_msg & hafu_ck(tel,"TEL") End If End If これを特定、文字が変数「tel」に(仮に「a」という文字が)含まれている場合には 「電話番号が間違えています!」というエラーメッセージを出したいのですがその場合、 If tel = "*a*" Then err_msg = err_msg & "<br>電話番号が間違えています!" Else If get_len(tel) > 15 Then err_msg = err_msg & "<br>T電話番号の文字数が多すぎます!" Else err_msg = err_msg & hafu_ck(tel,"TEL") End If End If という記述では間違えているのでしょうか。 実際に記述しててみると「a」以外の文字でも 「電話番号が間違えています!」というエラーメッセージが出てきてしまいます。 また他にも「a」だけなく「b」も含まれている文字列の場合にも同様の処理をしたいのですが、 その場合、以下のような記述では間違っているのでしょうか? If tel = "*a*" or "*b*" Then err_msg = err_msg & "<br>電話番号が間違えています!" Else If get_len(tel) > 15 Then err_msg = err_msg & "<br>T電話番号の文字数が多すぎます!" Else err_msg = err_msg & hafu_ck(tel,"TEL") End If End If 実際に記述しててみると前述と同様に「a」「b」以外の文字でも 「電話番号が間違えています!」というエラーメッセージが出てきてしまいます。 「複数の文字列の中に特定の文字が含まれている場合」のASPScriptでの If文の書き方をご存知の方は教えて頂けませんでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.1

VBScriptは読める程度なので詳しくないですが VBScriptの基礎も押さえずに思い込みだけで書こうとしていませんか? >そのソースコードは電話番号の変数名を「tel」としており、この変数に値がない、つまりNULL値であれば、エラーメッセージを出す場合には、以下のような記述になっています ソースコードは tel = "" ですから tel の値が空文字列""であればです。 空文字列とNULL値は同じではないです。 >If tel = "*a*" Then tel の値が "*a*" と等しい場合であり、telの値に"a"が含まれていた場合ではないです。 やるなら If InStr(tel, "a") != 0 Then になるかと思います。 >If tel = "*a*" or "*b*" Then 思われているような内容にはなりません。 VBScriptの文法的にエラーのはずですし。

参考URL:
https://msdn.microsoft.com/ja-jp/library/cc392489.aspx

関連するQ&A

  • ifでの条件分岐

    .net vb2005でプログラミングしています。 2つのテキストボックスがあり、その名前をtextbox1,textbox2 , 変数の代入をtx1、tx2とします。 どちらも半角数字で300までしか入力できません。 さらに、tx1に入力されるとtx2も必ず入力される必要があります。 tx1が未入力の場合はtx2も未入力である必要があります。 最初にtx1の文字数が0か確認し、入っている場合、居ない場合と ifで条件分岐させましたが うまくいきません。。 アドバイスいただきたいと思います。 Dim tx1,tex2 As Integer If Len(TextBox1.Text) = 0 Then flg = 0 ElseIf Regex.IsMatch(TextBox1.Text, "^[0-9]{1,3}$") Then tx1= Val(TextBox1.Text) tx1 = Convert.ToInt32(iptx5) '文字列をInteger型(数字型)に変換 Else MsgBox("300までの数字で入力して下さい", vbCritical, "入力エラー") TextBox1.Clear() Exit Sub End If If tx1 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox1.Clear() End If '********************************************************************** If Len(TextBox1.Text) = 0 Then flg = 0 exit sub ElseIf Regex.IsMatch(TextBox2.Text, "^[0-9]{1,3}$") Then tx2 = Val(TextBox2.Text) tx2 = Convert.ToInt32(tex2) Else MsgBox(ipm_msg1, vbCritical, "入力エラー") TextBox2.Clear() Exit Sub End If '**255以上なら入力不可** If iptx6 > 255 Then flg = 1 MsgBox(ipm_msg2, vbCritical, "入力エラー") TextBox6.Clear() Exit Sub End If

  • 単純な条件分岐だと思いますが。。。

    単純な条件分岐だと思いますが、アドバイスをお願いします。 if(条件) { A } else { B } 条件についてですが、$teldataに/(スラッシュ)が含まれればAを。 /が含まれなければBを。 と行った具合にしたいのですが、$teldataに/が含まれるか含まれないを判断するには、どのように記述すれば良いでしょうか。 $teldataには電話番号(例:03-1234-5678)が入ります 私はperlを本格的に勉強しているのではないのですが、検索していろいろと調べてみました。 $teldata = ~/["/"]/ 一応自分なりに上記のようにしてみましたが、ダメでした。 アドバイスを頂けると助かります。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • コードのどこが間違っているのかを教えてください。

    ある文字を入力し、それをカンマ区切りして3つに分け、その3つの最大値を表示するプログラムを入力したいです。ただし、条件として、上限の桁数5を越える、文字か数字化の判定を行い、文字が1つでも混ざっている際はエラー表記され再度入力、さらに終了判断を行う際も、あくまで「y」「n」と入力したときのみが正常であり、複数文字を入力する際は、エラー表記され、再度入力という形をとりたいです。 フローを書きながら、サブ関数も使い、LINUXで以下のように書いてみました。 ただ、これだと /*-----------------------------------------*/ /tmp/ccKMOmJN.o: In function `word_judge': kadai6.c:(.text+0x4b2): undefined reference to `isdigits' collect2: ld はステータス 1 で終了しました /*-----------------------------------------*/ となってしまいました。 どのようなコードに直せばいいのでしょうか? すごく長いですが、わかりやすく解説してくださると、とても助かります。 あと、fgets関数やsscanf、getchar関数など、ネット上のサンプルを参照して、使っただけなので、もしかしたら間違ってるかもしれません。 そこについても、教えてくださると、とてもうれしいです。 /* ソースコード */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #define LIMIT (5) #define NULLB '\0' #define ECOUNT (20) #define EWORD (2) int word_judge(char array[]); void digits_judge(int a_len , int b_len , int c_len) ; int main(int argc , char *argv[]) { int number_a ; int number_b ; int number_c ; int input_len ; int a_len ; int b_len ; int c_len ; int end_len ; char input[ECOUNT] ; char a[ECOUNT] ; char b[ECOUNT] ; char c[ECOUNT] ; char array[ECOUNT] ; char end[EWORD] ; end[0] = 'n' ; while( end[0] == 'n' ) { while(1) { number_a = 0 ; number_b = 0 ; number_c = 0 ; input_len = 0 ; a_len = 0 ; b_len = 0 ; c_len = 0 ; end_len = 0 ; memset(input , NULLB , sizeof(char) *ECOUNT) ; memset(a , NULLB , sizeof(char) *ECOUNT) ; memset(b , NULLB , sizeof(char) *ECOUNT) ; memset(c , NULLB , sizeof(char) *ECOUNT) ; memset(end , NULLB , sizeof(char) *EWORD) ; printf("a , b , c ?:") ; fgets(input , ECOUNT , stdin); input_len = strlen(input); if( input_len < ECOUNT-1 ) { sscanf(input , "%[^,] , %[^,], %s" , a , b , c); if(a[0] != NULLB && a[0] != NULLB && c[0] != NULLB) { if(word_judge(a) != 0 && word_judge(b) != 0 && word_judge(c) != 0 ) { a_len = strlen(a) ; b_len = strlen(b) ; c_len = strlen(c) ; if(a_len >= LIMIT || b_len >= LIMIT || c_len >= LIMIT) { digits_judge(a_len , b_len , c_len) ; } else { number_a = strtol(a , NULL , 10) ; number_b = strtol(b , NULL , 10) ; number_c = strtol(c , NULL , 10) ; printf("最大値:") ; if(number_a > number_b && number_a > number_c) { printf("%d\n", a); } else { if(number_b >number_a && number_b > number_c) { printf("%d\n", b) ; } else { printf("%d\n", c) ; } } break ; } } else { printf("文字が混ざっています。\n") ; } } else { printf("正しく入力して下さい。\n") ; } } else { if(input[ECOUNT] == '\n') { } else { while(getchar() != '\n'); } printf("入力数が多いです。\n"); } } while(1) { int end_len ; char end[EWORD] ; end_len = 0 ; memset(end , NULLB , sizeof(char) *EWORD) ; printf("終了しますか? y/n: "); fgets(end , EWORD , stdin); end_len = strlen(end); printf("\n"); if(end_len == EWORD) { if(end[0] != 'y' && end[0] != 'n') { printf("y or nを入力して下さい。\n"); } else { break ; } } else { if(input[ECOUNT] == '\n') { } else { while(getchar() != '\n'); } printf("入力が間違っています。y or n を入力しなおしてください。\n"); } } } return 0 ; } int word_judge(char array[ ]) { int array_len ; int i ; int tmp ; int r_value ; tmp = 0; r_value = 0 ; for(i=0 ; i< array_len ; i++) { tmp = isdigits(array[i]) ; if(tmp != 0) { r_value = 1; } else { r_value = 0; break ; } } return r_value ; } void digits_judge(int a_len , int b_len , int c_len) { int a ; int b ; int c ; a = 0 ; b = 0 ; c = 0 ; a_len = 0 ; b_len = 0 ; c_len = 0 ; if(a_len >= LIMIT) { a = 1 ; } else { } if(b_len >= LIMIT) { b = 10 ; } else { } if(c_len >= LIMIT) { c = 100 ; } else { } switch(a + b + c) { case 111 : printf("aとbとcの桁が多いです。\n"); break; case 11 : printf("aとbの桁が多いです。\n"); break; case 110 : printf("bとcの桁が多いです。\n"); break; case 101 : printf("cとaの桁が多いです。\n"); break; case 1 : printf("aの桁が多いです。\n"); break; case 10 : printf("bの桁が多いです。\n"); break; case 100 : printf("cの桁が多いです。\n"); break; } }

  • VBAで分岐条件に名前をつける

    If文の条件を外にだしさらに下記のようにIf文の中で論理演算を させるようなプログラムを作りたいにのですが、 ExxelVBAでそのようなことはできますでしょうか? できるとしたら教えてください。よろしくお願いします。 sub test() S1=36 S2=48 ’こういう名前の付け方はできないが、要はS1>0という条件に条件1と名づけたい。 条件1:=S1>0 条件2:=S2>0 IF 条件1*条件2=true then cells(1,1)=1 else if 条件1=true then cells(1,1)=2 else if 条件2=true then cells(1,1)=3 else cells(1,1)=0 end if end sub

  • マクロ 条件分岐の仕方

    いつも回答ありがとうございます。 条件分岐について質問です。 文字に『N 』含まれている時の条件処理と、『N』が含まれていない時の条件処理を記述記述しました。一応、この記述で上手く動作しているので問題ないのですが、他に記述方法はないのでしょうか?宜しくお願い致します。 Sub 色を塗る2() Dim b As Long '仮シートの列 Dim res As Variant '色の設定 Dim c As Variant '最後に定期をした日付のセル番地 Worksheets("仮シート").Activate b = 2 Do While Worksheets("仮シート").Cells(2, b).Value <> "" With Worksheets(Worksheets("仮シート").Cells(2, b).Value) Set c = .Columns("C").Find("定期", , xlValues, 1, , 2).Offset(, -1) If Worksheets("仮シート").Cells(2, b).Value Like "*N*" Then If (Date - 30) <= c And c <= Date Then res = 8 ElseIf (Date - 60) <= c And c <= (Date - 31) Then res = 10 ElseIf c <= (Date - 61) Then res = 3 End If End If If Worksheets("仮シート").Cells(2, b).Value Like "*N*" = False Then If (Date - 10) <= c And c <= Date Then res = 8 ElseIf (Date - 30) <= c And c <= (Date - 11) Then res = 10 ElseIf c <= (Date - 31) Then res = 3 End If End If Worksheets("仮シート").Cells(3, b).Interior.ColorIndex = res End With b = b + 1 Loop End Sub

  • 【bash】elifではない条件分岐

    bashスクリプトにて3つの条件を、If~elif~elseを使って分岐させていたのですが、 それぞれの条件を全て確認させたいという要件に変更となり、下記のように修正しました。 if (条件1); then <処理1> fi if (条件2); then <処理2> fi if (条件3); then <処理3> fi else <処理4> fi <処理5> 条件1~3はそれぞれ当てはまった場合に処理1~3を行い、 条件1~3にいずれも当てはまらなかった場合処理4を行う。 ↑上記全て終了したら処理5を行う という動きが希望なのですが、これですと条件1~3にいずれも 当てはまらなかった場合に処理4が行われません。 と、言うより先に最後のfiでsyntax errが出たので、処理4の後の fiを外したのですが、処理4と処理5が並列に扱われて? 両者とも行われなくなってしまいました。 書いていて、何となく条件1~3の前にさらにifを被せるのかなとも 思うのですが、イマイチぼんやりしています。 宜しくお願いいたします。

  • Excel VBA 条件分岐のスマートな書き方

    すみません。すごく初歩的な質問なのですが、 Excel VBAで以下のような条件分岐をさせたい場合、 もっとスマートな書き方できませんか? 命題 AとBに対して if not A then 処理X end if if not B then 処理Y end if if not(A and B) then 処理Z(この処理の中には処理Xと処理Yの結果が含まれている) end elseifを使った書き方が思い浮かばず、 同じことを何度も書いているようで、もっと上手に書けそうな気がしまして・・・ どなたかご教示頂けたらと思います。

  • このVBAソースのどこが間違ってるか教えてください

    Dim csp As Integer 'ストップ Dim css As Integer 'ストップorスタート Sub Quest2() If css = 0 Then css = 1 Quest2a Else cstp = 1 css = 0 End If End Sub Sub Quest2a() Sheets("Sheet1").Select Range("B1:J10").Select Selection.Interior.ColorIndex = x1None Range("a1").Select cstp = 0 Do r = 1: c = 5 For i = 0 To 15 If i < 9 Then Cells(r, c).Interior.ColorIndex = x1None r = r + 1 If i < 5 Then c = c + 1 Else c = c - 1 End If Cells(r, c).Interior.ColorIndex = 3 Else Cells(r, c).Interior.ColorIndex = x1None r = r - 1 If i < 13 Then c = c - 1 Else c = c + 1 End If Cells().Interior.ColorIndex = 3 End If 'タイミング For tm1 = 1 To 1000: For tm2 = 1 To 100: Next If cstp = 1 Then Exit For End If Next DoEvents If cstp = 1 Then Exit For End If If r = 3 And c = 5 Then Cells(r, c).Interior.ColorIndex = x1None End If Next DoEvents If cstp = 1 Then Exit Do End If Loop Cells(10, 9) = Cells(r, c) Cells(10, 9).Interior.ColorIndex = 8 End Sub

  • 条件分岐

    Windows2000 access2000 毎月Excelで材料費を以下のように入力しています。 店番号、日付、金額 000001,2006/07/01,1000 000001,2006/07/02,1450 000001,2006/07/03,2000 このシートを翌月にaccessにインポートします。 インポートを指示するためのフォームを作成し、店、年、月を指定して実行ボタンでインポートを行うようにしました。 このとき月の日数にあわせてインポートするシートの範囲を指定するため以下のような条件分岐にしました。 If Me!月 = "02" Then DoCmd.TransferSpreadsheet acImport, 8, "材料費", fname01, True, "材料!a2:c30" ElseIf Me!月 = "04" Or "06" Or "09" Or "11" Then DoCmd.TransferSpreadsheet acImport, 8, "材料費", fname01, True, "材料!a2:c32" Else DoCmd.TransferSpreadsheet acImport, 8, "材料費", fname01, True, "材料!a2:c33" End If ところが上2つの条件では正常にインポートされるのですが、3番目の条件でインポートを指示しても2番目の条件でインポートされてしまいます。順番を入れ替えても同じ結果になりました。 何がいけないのでしょうか。 よろしくお願いします。

  • VBSでフォルダ、ファイル作成時のエラーコード

    フォルダ、ファイルが存在しないとき、作成するスクリプトをVBSで作成していますが、疑問点があるのでご教示ください。 objFSO.CreateFolder、objFSO.CreateTextFileを実行が、正常に行われた場合、 Err.Numberに0がセットされると思っていましたが、実際は違っていました。 objFSO.CreateFolderでフォルダが作成される場合、Err.Numberに13が返されます。 objFSO.CreateTextFileでファイルが作成される場合、Err.Numberに438が返されます。 このスクリプトを実行後、フォルダ、ファイルが存在しない場合、作成されることも確認しています。 フォルダ作成後、作成されたフォルダに対して、ファイルの作成/データの書き込みのアクセス権を拒否にすると返されるErr.numberに70がセットされることも確認しています。 なぜ、フォルダ、ファイルが作成された場合、0が返されないのかご存知の方がいらっしゃいましたらご教示ください。 また、その情報が記載されている書籍およびサイトがあれば、お教えいただければ、幸いです。 Option Explicit Dim objFSO Dim objFile Const strFolderName = "C:\VBS" Const strFileName = "C:\VBS\test.txt" On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then WScript.Echo "FSOオブジェクトを作成しました" Else WScript.Echo "FSOオブジェクトを作成できませんでした" WScript.Quit(1) End If If objFSO.FolderExists(strFolderName) Then WScript.Echo "フォルダが見つかりました" Else WScript.Echo "フォルダが見つかりませんでした" If objFSO.CreateFolder(strFolderName) Then If Err.Number = 13 Then WScript.Echo "フォルダを作成しました" Else WScript.Echo "フォルダを作成できませんでした" WScript.Quit(1) End If End If End If If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else Script.Echo "ファイルが見つかりませんでした" If objFSO.CreateTextFile(strFileName) Then If Err.number = 438 Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If End If

専門家に質問してみよう