39690


JavaScript(JQuery)で、INPUT TYPE=TEXTの枠内に、タブコードか改行コードが検出されたら  
エラーを検知するfunctionを作ろうとしています。

# ====質問====

試しに以下のようにfunctuionを作ってみましたが、何の文字でもエラー検知される状況です。  
大変あつかましいのですが、正しく検知する為のコードをご教示頂けませんでしょうか？

[code]

    //備考チェック
    $("input[name=bikou]").on("blur",function() {
        if (chkTabCr($(this))) {
            alert("タブか改行コードが発見された！");
        } else {
        };
    });
    //補足チェック
    $("input[name=hosoku]").on("blur",function() {
        if (chkTabCr($(this))) {
            alert("タブか改行コードが発見された！");
        } else {
        };
    });
    
    
    //【タブコードと改行コードの検知】
    function chkTabCr ($obj) {
        var r = true;
        var val = $obj.val();
        if(val == "") {
            r = false;
        } else {
            var len = 0;
            var c ="";
            for (i = 0; i < val.length; i++) {
                c = escape(val.charAt(i));
                if(c == "%09" || c == "") { // ***問題のところ***
                    r = true;
                }
            }
        }   
        return r;
    }
    
[/code]


CC BY-SA 3.0
2017-11-19T07:34:12.067
39689
2017-11-19T09:09:55.360
2020-06-17T08:14:45.997
-1
25696
question
javascript jquery html5
INPUT TYPE=TEXTの枠内で、タブコードと改行コードの存在を検知したい


一番の問題点は、あなたの`chkTabCr`関数の中のこの行です。

[code]

    var r = true;
    
[/code]

戻り値として使われているローカル変数`r`の初期値として`true`を設定していますから、以後のコードで`r`の値を`false`に変更するようなコードが実行されない限り、この関数は`true`を返します。

* * *

他にもタブコードを検出するにの`escape`なんて面倒なことをしていたり、コメントや質問文中では「改行コード」も検出すると書いてあるのにそのためのコードがない(`""`との比較は改行コードとは全然関係ないですね)とかを修正して、あなたの元のコードに近い構成にすると、こんな感じになります。  
(`type="text"`の`input`に改行コードが含まれることがあるのかとか、`blur`イベントがこの手のチェックに適しているかとかはここでは無視します。)

[code]

    function chkTabCr($obj) {
      var r = false; //<-初期値はfalse, タブコードか改行コードを見つけたらtrueにする
      var val = $obj.val();
      if( val != '' ) {
        for( var i = 0; i < val.length; ++i ) {
          var c = val.charCodeAt(i);  //1文字文字列ではなく、文字コードを取得する
          if( c === 9 || c === 13 || c === 10 ) { //<-タブ(9)、CR(13)、LF(10)
              r = true;
          }
        }
      }
      return r;
    }
    
[/code]

ちなみに1文字文字列としてタブコードなどと比較するならこんな書き方になります。

[code]

      var c = val.charAt(i);  //1文字文字列
      if( c === "\t" || c === "\r" || c === "\n" ) { //<-タブ("\t")、CR("\r")、LF("\n")
          r = true;
      }
    
[/code]

正規表現に慣れている人なら、この方がはるかに見やすいかもしれません。

[code]

    function chkTabCr($obj) {
      var val = $obj.val();
      return /[\t\r\n]/.test(val);
    }
    
[/code]


CC BY-SA 3.0
2017-11-19T09:09:55.360
39690
2017-11-19T09:09:55.360
13972
39689
answer