返回时JQuery .length()和.NET .Length之间的区别

时间:2010-08-03 11:50:26

标签: asp.net jquery string

我编写了一个jQuery函数来检查给定文本框中的字符总数,并在超过最大(用户定义的)长度时弹出警告。

示例:(大大简化):

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

这可以按预期工作,但是像一个优秀的小开发人员一样,我也根据输入文本分配给的字段长度(在我的域对象上)执行服务器端验证。

在那里,我注意到以下字符串:

12<RETURN>34 

(其中<RETURN>显然是返回字符)

将在Javascript中返回5作为长度 并在.NET中返回6作为长度(String.Length)

我在这里遗漏了什么吗?或者我将被迫计算javascript字符串中的返回数,然后将它们加倍以获得“正确的”.NET计数?关于如何处理这个的任何指针?

更新:我确实可以通过按照以下建议进行更换来获得正确的长度。

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

然而,除了检测字符数之外,还有更多的问题,因为一旦系统检测到输入了太多字符,它应该(客户端)去除所有多余的字符(这可能不止一个,因为用户可能会将太多文本复制粘贴到文本框中。)

类似的东西:

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

这当然会让我遇到麻烦,如果我计算返回加倍,因为错误的字符数有被删除的风险。我怎样才能可靠地删除正确数量的字符?

1 个答案:

答案 0 :(得分: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));
        }