Подтвердить что ты не робот

Как обнаружить разрывы строк в текстовой области ввода?

Каков наилучший способ проверить значение текстовой области для разрывов строк, а затем рассчитать количество вхождений, если они есть?

У меня есть текстовая область в форме на моей веб-странице. Я использую 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 были немного длинными, так что я был после некоторых лучших решений. Благодарим вас за все предложения.

4b9b3361

Ответ 1

Вы можете использовать match в строке, содержащей разрывы строк, а количество элементов в этом массиве должно соответствовать количеству разрывов строк.

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

/\n/g - это регулярное выражение, означающее "искать символ \n (разрыв строки) и делать это глобально (по всей строке).

Часть ||[] находится на всякий случай, если нет разрывов строк. Match вернет null, поэтому вместо ошибок мы проверим длину пустого массива.

Ответ 2

Я бы сделал это, используя регулярное выражение:

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);

Или что-то подобное...

Ответ 3

Здесь один из способов:

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

В качестве альтернативы вы можете заменить все "голые" \n символы на \r\n, а затем использовать общую длину.

Ответ 4

Для нового JS используйте encodeURI(), потому что escape() устарел в ECMAScript 1.5.

Вместо этого используйте:
enteredText = textareaVariableName.val(); enteredTextEncoded = encodeURI(enteredText); linebreaks = enteredTextEncoded.match(/%0A/g); (linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;