2010-08-03 78 views
0

我写了一个jQuery函数来检查给定文本框中的字符总数,如果它超出最大值(用户定义的)长度。JQuery .length()和.NET之间的区别返回的长度为

实施例:(大大简化):

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

这按预期方式工作,但像一个很好的小显影剂我还针对所输入的文本被分配到该字段的长度上执行的服务器端验证(我的域对象)。

它的存在,我注意到以下字符串:

12<RETURN>34 

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

将在Javascript 返回5长度和返回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中它被剥离并因此不被计数。 – 2010-08-03 11:53:48

+2

请检查此类似问题的解决方法http://stackoverflow.com/questions/462348/string-length-differs-from-javascript-to-java-code – 2010-08-03 11:54:48

+0

我确实可以得到正确的计数,就像在JavaScript中,谢谢。但是,这个问题还有更多的问题。我已经更新了原来的问题。 – Sam 2010-08-03 12:15:26

回答

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)); 
     } 
相关问题