【MENU】
【文字列に含まれるhtml特殊文字をチェックして警告・代替・削除する】
◆データベースの入力フォームにおいて、サーバー側でも文字エスケープの処理を行うが、入力時点でjavascript によりhtml特殊文字をチェックする。
 [html特殊文字]:<>&”(←は全角で記述しているが実際は半角文字)
◆javascript Tips
  f=0:警告のみ
  f=1:対象文字を別の文字に置き換え(<→[,>→],&→*,"→#)
  f=2:対象文字を強制的に削除
function fnHtmlspecialchars2(strR,f){
//strR:検査する文字列
  var strR2="";
  var strAction=0;
  var g;
  var strCom;
  
  var InputVal='<>&,"'; //html特殊文字リスト   
  for(i=0;i<strR.length;i++){
      g=strR.charAt(i);
      if (InputVal.indexOf(g,0)>=0){
          strAction=1;
          if(f==0){
              strR2=strR2 + g;   //何もしない
          }else if(f==1){
              switch(g){
                  case '<':
                      strR2=strR2 + g.replace(g,'['); 
                      break;
                  case '>':
                      strR2=strR2 + g.replace(g,']');
                      break;
                  case '&':
                      strR2=strR2 + g.replace(g,'*');
                      break;
                  case '"':
                      strR2=strR2 + g.replace(g,'#');
                      break;
                  default:
                      strR2=strR2 + g.replace(g,'?');
                      break;
              }
          }else{
              strR2=strR2 + g.replace(g,"");  //対象文字削除
          }    
      }else{
          strR2=strR2 + g;
      }
  
  if(strAction==1){
      if(f==0){
          alert(' html特殊文字( < > & " \\ \')等が入力されていますが、操作は継続できます。');
      }else{
          if(f==1){        
               strCom='html特殊文字を入力することはできません。自動的にこれらの文字を (<→[)(>→])(&→*)("→#) に置き換えます。操作中止する場合は[キャンセル]を選択して下さい。';
           }else if(f==2){
                strCom= 'html特殊文字を入力することはできません。自動的にこれらの文字を削除します。操作中止する場合は[キャンセル]を選択して下さい。';
           }
           if(!confirm(strCom)){
              return strR;
	  }else{
              return strR2;
           }
      }
  }else{
      return strR; //特殊文字がない
  }
}
(DataID:000012)
 
【文字列に指定した文字が含まれているなら警告する】
◆javascript tips
//strR:文字列
function fnWordCheck(strR){
  var InputVal="ABCDE";  //許容されない文字
    var g;
    for(i=0;i<strR.value.length;i++){
        g=strR.value.charAt(i);
        //InputValリストの文字が使用されていればエラー警告
        if(InputVal.indexOf(g,0)>=0){
           alert("  使用できない文字が入力されました。");
           return false;
        }
    }
}
◆許容されない文字が入力されたとき、代替文字に置き換えるか、強制的に削除するか等が選択できるようにすると使い勝手がよい。
(DataID:000008)
 
【文字列の前後の半角空白を削除する】
◆データベースを活用しているとどうしてもvbscriptのtrim()関数が欲しくなります。javascriptで同様の機能を実行できます。
◆javascript Tips
//strR:文字列(入力) strR2:文字列(出力)
function fnTrim(strR){
   var i=0; 
   var strR2;    
   while(i<strR.length){
        if(strR.substring(strR.length-1,strR.length)==" "){
            strR2=strR.substring(0, strR.length-(i+1));
        }else{
            break;
        }
        i++;
    }
    return strR2;  //strR2を戻り値として返す
}
(DataID:000006)
 
【文字列の半角空白を有効にするため、半角空白を&nbsp; に代替えする】
◆ブラウザによっても異なるようですが、データベースやファイルを読み込んだとき、行頭にある半角空白が無視されて表示されることがあります。文字をインデントしたいのにこれでは具合が悪い。読み込んだとき文字列の半角空白を  &nbsp;(html代替文字・全角で記述・実際は半角文字)に代替えすると、半角空白が有効になります。
  
(データベース・ファイルのデータ)
     あいうえお(半角空白4文字が行頭に付加されている)
↓
(何も処理しないと)
あいうえお(半角空白4文字が行頭に付加されている)
↓
(この記事に記載された方法で処理すると)
     あいうえお(半角空白4文字が行頭に付加されている)
◆javascript Tips
//strR:文字列(入力) strR2:文字列(出力)
function fnStrChange_xx(strR){
  var strR2="";
  strAction=0;
	  
  for(i=0;i<strR.length;i++){
      g=strR.charAt(i);
          if(g==" "){
              strAction=1;
              strR2=strR2 + g.replace(g,"&nbsp;");
         // &nbsp;は全角文字で記述→半角に変える
          }else{
	     strR2=strR2 + g;
	 }   
  }   
  
  if(strAction==1){
      return strR2;
  }else{
      return strR;
  }
}
◆メモ
※インデント(字下げ)するのに全角空白を使う---この方法を多用してきたのだが---と、一部のブラウザでは表示が乱れる原因となるらしい。
※この記事に記載した機能を得るためにHTMLに<pre>〜〜</pre>を用いてみたが、枠内で自動的に改行されない(枠外にまで表示される)等の問題が生じた(IE7.0)ので、採用しなかったという経緯あり。
(DataID:000013)
 
【変数の型を調べる()javascript】
◆tips
[javascript]
strR2:戻り値
strR:入力値
strR2=typeof(strR);
[型]
  strR2="string":文字列
  strR2="number":数値
  strR2="object":オブジェクト
(DataID:000080)