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