我编写了一个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));
}
这当然会让我遇到麻烦,如果我计算返回加倍,因为错误的字符数有被删除的风险。我怎样才能可靠地删除正确数量的字符?
答案 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));
}