2010-08-03 2 views
0

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

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

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

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

+2

Потому что я думаю, \ n также учитывается в .net языке и где, как в jQuery, он удаляется и, следовательно, не учитывается. –

+2

Пожалуйста, проверьте этот аналогичный вопрос для обходного пути http://stackoverflow.com/questions/462348/string-length-differs-from-javascript-to-java-code –

+0

Я действительно могу получить правильное количество в javascript, спасибо , Тем не менее, есть еще вопрос к этому. Я обновил исходный вопрос. – Sam

ответ

0

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

// 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)); 
     } 
Смежные вопросы