web-dev-qa-db-ja.com

テキスト領域入力で改行を検出する方法は?

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

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は少し長めだったので、いくつかのより良い解決策を求めていました。すべての提案をありがとう。

42
Dave Haigh

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

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

/\n/gは、文字\n(改行)を探し、グローバルに(文字列全体で)行うことを意味する正規表現です。

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

66
beeglebug

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

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

ここで、/\n/は改行に一致します(明らかに)、gはグローバルフラグです。 mはmult-lineの略で、この場合は明らかに必要です...
代わりに、私が思い出すように、これは少し遅いです:

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

編集改行が一致しない場合、これはエラーを吐き出すので、最善を尽くしてください。

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

または同様のもの...

4

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

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

または、すべての「裸の」\n文字と\r\nそして、全体の長さを使用します。

3
Pointy

新しいJSでは、encodeURI()を使用します。ECMAScript1.5ではescape()が推奨されないためです。

代わりに使用します:
enteredText = textareaVariableName.val(); enteredTextEncoded = encodeURI(enteredText); linebreaks = enteredTextEncoded.match(/%0A/g); (linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;

2
Peter