Разница между JQuery .length () и .NET .Length для возвратов - PullRequest
0 голосов
/ 03 августа 2010

Я написал функцию jQuery для проверки общего количества символов в данном текстовом поле и появления предупреждения, если оно превышает максимальную (определяемую пользователем) длину.

Пример: (очень упрощенно):

function checkLength(txt)
{
   if (txt.length >= maxlength) 
   {
      alert('Too much text entered');
      return false;
   }
   else
      return true;
}

Это работает, как и ожидалось, но, как хороший маленький разработчик, я также выполняю проверку на стороне сервера по длине поля, которому назначен введенный текст (на моем доменном объекте).

Там я заметил, что следующая строка:

12<RETURN>34 

(где <RETURN>, очевидно, является возвращаемым символом)

вернет 5 как длину в Javascript и вернуть 6 как длину в .NET (String.Length)

Я что-то здесь упускаю? Или я буду вынужден подсчитать количество возвратов в строке javascript и затем удвоить их, чтобы получить «правильный» счетчик .NET? Любые указатели о том, как справиться с этим?

ОБНОВЛЕНИЕ: я действительно могу получить правильную длину, выполнив замену, как предложено ниже.

function GetCurrentLength(txt) {
   return txt.replace(/\n/g, "\n\r").length;
}

Тем не менее, есть нечто большее, чем вопрос подсчета символов, потому что, как только система обнаружит, что введено слишком много символов, она должна (на стороне клиента) удалить все лишние символы (это может быть больше, чем один, потому что пользователи могут скопировать и вставить слишком много текста в текстовое поле).

Что-то вроде:

if (textLength > maxlength) {
    self.val(text.substr(0, maxlength));
}

Это, конечно, доставит мне неприятности, если я посчитаю возвращаемое значение double, поскольку неправильное количество символов может быть удалено. Как я могу надежно удалить правильное количество символов тогда?

1 Ответ

0 голосов
/ 03 августа 2010

Это было мое окончательное решение, я чувствую себя немного грязным, но делаю свою работу.

// Calculate the length of a string, but take care to count returns for 2 characters instead 
        // of one. That way, we should get the same length as in .NET

        function GetCurrentLength(txt) {
            return txt.length + GetNumberOfReturns(txt);
        }

        function GetNumberOfReturns(txt)
        {
            var numberOfReturns = 0
            var enterRegExpr = txt.match(/\n/g);
            if (enterRegExpr)
                numberOfReturns = enterRegExpr.length ;

            return numberOfReturns;
        }

        function CutToMaxLength(txt, maxlength) {
            return txt.substr(0, maxlength - GetNumberOfReturns(txt));
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...