2016-12-01 5 views
0

ユーザーが書き込んでいる間に、私は(jQueryのでは)JavaScriptを使用して文字列をトリミングしようとしている:書き込み中にスペースやタブを削除/トリムする方法は?

$(document).on('keydown', "input[type='text'], textarea", function(e) { 
      $(this).val($(this).val().trim()); 
      console.log('fixing'); 
     //if ($(this).val() == "") { 
      //alert('gwo!'); 
     //} 
    }); 

をしかし、ユーザーが別の単語を書くためにスペースを書き込むとき、ここで問題がある、このコードは、データをトリミング

I'mbigandgreat

本当に私はタブやスペースを削除することです必要なものをするとき、クリップボードからCTRL + Vを使用して、ユーザーのテキスト:入力し、次の単語でのように連結されます。

お手伝いできますか?

+1

イベント/ペースト)イベントを表示することができます。 –

答えて

1

私はこれがあなたが必要と考えるものです。繰り返し空白文字を探します。最後のものを保存し、他のものを削除します。 RegExpでString.replaceがこれを処理できます。

また、私はkeyUpイベントイベントを使用する代わりにのKeyDown

[ `paste`(https://developer.mozilla.org/en-US/docs/Web/を使用

$(document).on('keyup', "input[type='text'], textarea", function(e) { 
 
    let val = $(this).val(); 
 
    val = val.replace(/(?:^\s+|\s+?(\s))(\S+)/g, "$1$2"); 
 
    val = val.replace(/\s+(\s)$/, "$1"); 
 
    $(this).val(val); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea cols="40" rows="10"></textarea>

+0

これは良いですが、\ tの大文字と小文字は含まれていません。 'val.replace(/ \ s +?(\ s)(\ s)/ g、" $ 1 $ 2 ")) ??それはそうです? –

+0

@Cristian \ sがすべて空白文字(\ nは、」」、\ tの...など)が含まれ –

+0

でそれを試してみてください。 '\t \ T \ T \ T \t \t asasdas \t asdasaas \ T \ T \ T \t \t'タブがまだそこに残る。 「これは私がここで欲しいものだけです\ t \t」には、最初に1つのスペースがあります。 –

1

keydownイベントをキャプチャするだけでなく、ユーザーがCtrl + Vを押すか入力をペーストするときに、トリムコードを実行する必要があります。

IEでは実装が難しいでしょうが、他のブラウザではpasteイベントを使用できます。

また、(これは臭いですが)e.which ===「ASCIIコードfor V」とe.ctrlKey === trueをチェックしてください。

0

クライアントでトリミングする必要がありますか?それが重要なのであれば、とにかくそれをサーブ上で行う必要があるので、そこに残すことができるかもしれません。

関連する問題