Вопрос по javascript, jquery, line-breaks, special-characters – Как обнаружить разрывы строк в области ввода текста?
What is the best way to check the text area value for line breaks and then calculate the number of occurrences, if any?
У меня есть текстовая область на форме на моей веб-странице. Я использую JavaScript, чтобы получить значение текстовой области, а затем проверяю его длину.
ExampleenteredText = textareaVariableName.val();
characterCount = enteredText.length; // One line break entered returns 1
Если пользователь вводит разрыв строки в текстовой области, мои вычисления выше дают разрыв строки длиной 1. Однако мне нужно задать разрывы строки длиной 2. Поэтому мне нужно проверить разрывы строк и количество вхождений, а затем добавить это на общую длину.
Example of what I want to achieveenteredText = 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
был немного скучным, поэтому я искал несколько лучших решений. Спасибо за все предложения.
\n
..........
Edit
есть причина, не используйтеanswer
раздел, чтобы добавить больше деталей :)
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);
Edit Только что понял, что, если нет совпадений между строками, это приведет к ошибке, поэтому лучше сделать:
charCount = intTxt.length + (inTxt.match(/\n/) !== null ? inTxt.match(/\n/gm).length : 0);
Или что-то подобное ...
match
вернусьnull
так что доступlength
выдаст ошибку.
encodeURI()
, так какescape()
не рекомендуется в ECMAScript 1.5.
Вместо этого используйте:
enteredText = textareaVariableName.val();
enteredTextEncoded = encodeURI(enteredText);
linebreaks = enteredTextEncoded.match(/%0A/g);
(linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;
var count = text.length + text.replace(/[^\n]/g, '').length;
В качестве альтернативы, вы можете заменить все "голые"\n
персонажи с\r\n
а затем используйте общую длину.
match
на строке, содержащей разрывы строк, а количество элементов в этом массиве должно соответствовать количеству разрывов строк.
enteredText = textareaVariableName.val();
numberOfLineBreaks = (enteredText.match(/\n/g)||[]).length;
characterCount = enteredText.length + numberOfLineBreaks;
/\n/g
является регулярным выражением, означающим «искать символ»\n
(разрыв строки), и сделать это глобально (через всю строку).
||[]
часть на случай, если нет разрывов строк. Матч вернетсяnull
поэтому мы проверяем длину пустого массива, чтобы избежать ошибок.
\n
сами? может быть, они просто хотят выразить эту строку. Этот способ заменит\n
строка на следующую строку?