50

改行のテキスト領域の値を確認し、発生した場合はその数を計算する最良の方法は何ですか?

Web ページのフォームにテキスト領域があります。JavaScript を使用してテキスト領域の値を取得し、その長さを確認しています。

enteredText = textareaVariableName.val();
characterCount = enteredText.length; // One line break entered returns 1

ユーザーがテキスト領域に改行を入力すると、上記の計算では改行の長さが 1 になります。ただし、改行の長さは 2 にする必要があります。したがって、改行と出現回数を確認してから、これを全長に追加します。

私が達成したいことの例

enteredText = textareaVariableName.val();
characterCount = enteredText.length + numberOfLineBreaks;

この質問をする前の私の解決策は次のとおりです。

enteredText = textareaVariableName.val();
enteredTextEncoded = escape(enteredText);
linebreaks = enteredTextEncoded.match(/%0A/g);
(linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;

テキストのエンコードとチェック%0Aが少し面倒であることがわかったので、より良い解決策を探していました。すべての提案に感謝します。

4

5 に答える 5

74

改行を含む文字列で使用できmatch、その配列内の要素の数は改行の数に対応する必要があります。

enteredText = textareaVariableName.val();
numberOfLineBreaks = (enteredText.match(/\n/g)||[]).length;
characterCount = enteredText.length + numberOfLineBreaks;

/\n/gは、「文字 (改行) を探し、\nそれをグローバル (文字列全体) で行う」という意味の正規表現です。

||[]部分は改行がない場合の念のためです。Match は を返すnullので、エラーを避けるために、代わりに空の配列の長さをテストします。

于 2012-06-08T14:22:41.687 に答える
4

1 つの方法を次に示します。

var count = text.length + text.replace(/[^\n]/g, '').length;

または、すべての「裸の」\n文字を に置き換えて\r\n、全体の長さを使用することもできます。

于 2012-06-08T14:21:46.310 に答える
4

正規表現を使用してこれを行います。

var inTxt = document.getElementById('txtAreaId').value;
var charCount = inTxt.length + inTxt.match(/\n/gm).length;

改行に/\n/一致する場所 (明らかに)gは、グローバル フラグです。mこの場合、明らかに必要な複数行を表します...
別の方法として、私が思い出したように、これは少し遅いです:

var charCount = inTxt.length + (inTxt.split("\n").length);

編集 改行が一致しない場合、エラーが発生することに気付きました。

charCount = intTxt.length + (inTxt.match(/\n/) !== null ? inTxt.match(/\n/gm).length : 0);

それとも似たような...

于 2012-06-08T14:22:09.270 に答える