2011-07-02 7 views
1

この問題を解決する方法について少し混乱しています。標準的で一般的に見えますが、価値のあるものは何も見つかりませんでした。私はHTMLテキストエリアと入力用のテキストボックスを持っています。私は、次検証する:ユーザーがテキストエリアに空白の束を入力できないようにする必要があり空白のデータが送信されるのを防ぐためにjavascriptの空白の束を確認し、中間のスペースをトリミングする

  1. - ので、15の文字が最低16個の空白文字である場合にのみ有効なデータにはカウントされないようにしてください。単純な文字数では検出されません。
  2. 16個の空白と1文字を入力できますが、それでも無効なデータです!とにかくここで妥当性をチェックするためにチェックする(それは基本的に以下の点で2文字として数えるべき)?
  3. 不要な空白を整理する - つまり、ある人物が文字/単語を入力し、それを10個の空白で区切り、次に1個の文字と別の空白のセットでフォローすると、それらを1つの空白に切り捨てることができます。あなたが答えを入力するときに起こるように/新しい質問がある。たくさんの空白を入力すると、自動的にそれがトリミングされます。私は周りを検索しようとしましたが、空白固有のものはありませんでした。

直感的に私はちょうど#3の解決策を得ることができます私はそれが自動的にチャーカウンタ機能にフィードすることができ、それは正しいだろうと思いますか?

これを行うにはどうすればいいですか? jQueryのまたはJavaScriptが両方許容される:)

答えて

2

あなたが正規表現(live example)を介してスペースを持つ複数のスペースの出現をすべて置き換えることができます。

var text = "a  b  c"; 
text = text.replace(/ +/g, ' '); 
alert(text); // "a b c" 

1に続いてスペースを探すことで動作しますそれ以上のスペースをグローバルに置き換え、それらをただ1つのスペースに置き換えます。

正規表現はスペースに固有のものです。他の形式の空白は扱えません。あなたが1つのスペースを入れて二つ以上の空白文字の出現をすべて置き換えるしたい場合は、この操作を行うことができます:\s(空白)文字クラスを使用しています

var text = "a \t\r\n b \t\r\n c"; 
text = text.replace(/\s\s+/g, ' '); 
alert(text); // "a b c" 

を。ほとんどの実装は\sを正しく適用していることに注意してください。しかし、Unicodeで定義されているもっと難解な空白文字のいくつかに関連するバグがあります。 (好きなブラウザがhereをどのようにしているか、またはhereの詳細を読むことができます)。非常にありそうではありません。あなたが説明するユースケースを気にしているかもしれませんが、おそらくそれを心配する必要はありません。

+0

「実装バグ」のポイントを詳しく説明できますか?どのような種類のバグがあり、どのようなバグを考慮しているか、何を探して探すべきか明確ではない – PhD

+0

正規表現は/ [\ W] {2、}/g'でなければなりませんタブや改行のような15語の非単語文字。 http://jsfiddle.net/NaWJG/ –

+2

@Jim: '\ s'はタブ、改行、改行などを扱います。それがその目的です。 '\ W'(非ワード文字)を使うと、他の文字の*ロット*を削除します。たとえば、このコメントの最初の文にregexpを適用すると、タブと改行が覆われます.Wを使用すると、単語以外の文字がたくさん削除されます。私が想像することはできません。 :-)(また、 '[\ W]' = '\ W'はスペースが単語文字ではないためです。) –

関連する問題