количество строк текстового поля javascript - PullRequest
0 голосов
/ 16 июня 2011

Мне нужно сосчитать все строки в текстовой области.Мой код:

function textareaCurLineNum(obj)
{
    return obj.value.split(/[\r\n]/g).length;
}

В Firefox и Chrome это работает хорошо.В Opera он возвращает еще один.

Я пытаюсь это:

function textareaCurLineNum(obj)
{
    if (!/Opera/.test(navigator.userAgent)){
        return obj.value.split(/[\r\n]/g).length;
    } else {
        return obj.value.split(/[\r\n]/g).length-1;
    }
}

Теперь, если строк = 3, опера возвращает 4, 4 строки - 6, 5 строк - 8. Гдепроблема?

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Квадратные скобки содержат набор символов, а не последовательность.разделить на \ n в регулярном выражении.

function textareaCurLineNum(obj)
{
    if (!/Opera/.test(navigator.userAgent)){
        return obj.value.split(/\n/g).length;
    } else {
        return obj.value.split(/\n/g).length-1;
    }
}
1 голос
/ 16 июня 2011

Попробуйте разделить только на \n. Как ты это написал - если у меня есть:

first line \r\n
second line

это разделение вернет 3, так как оно считает пустоту между \r и \n как строку.

Более надежным решением будет сначала нормализовать текст, заменив все \r\n (победа) и просто \r (mac) на \n, а затем разделив на \n.

...