首页 新闻 会员 周边 捐助

asp.net 一个txtBox输入框,输入长度过长,保存数据库时报错提示“将截断字符串...”。做这个txtBox验证

0
悬赏园豆:40 [已解决问题] 解决于 2012-11-05 23:33

如题,客户端一个txtbox的值要存入数据库表中某个字段中,字段类型是 [varchar](20)。在客户端,如何做这个输入长度验证?

用户在输入框中可以输入任意内容,包含中英文特殊字符等。

1.输入全中文时,最多可以输入这么长:“测试数据额_实际值值”。

2.中英文混合,最多可以输入这么长:“测试数据额_实际nini3”。

 

寻相关验证这个输入框的方法,先谢过园友们的热情回答!

icyme的主页 icyme | 初学一级 | 园豆:77
提问于:2012-11-04 23:11
< >
分享
最佳答案
1

//验证的方法,20个字节,10个中文
<textarea name="txtCheck" id="txtCheck"  oninput="CheckLenth(this,20)" onpropertychange="CheckLenth(this,20)"></textarea>
<script>
//需要调用的js
function CheckLenth(obj, maxlimit) {
    var len = byteLength(obj.value);
    if(len > maxlimit) {
      obj.value = getStrbylen(obj.value, maxlimit);
    }
}
function getStrbylen(str, len) {
  var num = 0;
  var strlen = 0;
  var newstr = "";
  var obj_value_arr = str.split("");
  for(var i = 0; i < obj_value_arr.length; i ++) {
      if(i < len && num + byteLength(obj_value_arr[i]) <= len) {
          num += byteLength(obj_value_arr[i]);
          strlen = strlen+ 1;
      }
  }
  if(str.length > strlen) {
      newstr = str.substr(0, strlen);
  }else{
      newstr = str;
  }
  return newstr;
}
function byteLength (sStr) {
  aMatch = sStr.match(/[^\x00-\x80]/g);
  return (sStr.length + (! aMatch ? 0 : aMatch.length));
}

</script>

收获园豆:20
kuair | 菜鸟二级 |园豆:242 | 2012-11-05 15:38

谢谢回答!改天有时间一定试试这个方法,目前采用的是这种方式:参数就是要验证的输入框的值

public static int GetLength(string str)
{
if (str == null || str.Length == 0) { return 0; }

int l = str.Length;
int realLen = l;

#region 计算长度
int clen = 0;//当前长度
while (clen < l)
{
//每遇到一个中文,则将实际长度加一。
if ((int)str[clen] > 128) { realLen++; }
clen++;
}
#endregion

return realLen;
}

icyme | 园豆:77 (初学一级) | 2012-11-05 23:30
其他回答(7)
0

肯定是用javascript了 网上有的是验证的网页 down下来就ok了!

钢的锅 | 园豆:10 (初学一级) | 2012-11-05 00:41

谢谢回答!目前采用的是这种方式:参数就是要验证的输入框的值

public static int GetLength(string str)
{
if (str == null || str.Length == 0) { return 0; }

int l = str.Length;
int realLen = l;

#region 计算长度
int clen = 0;//当前长度
while (clen < l)
{
//每遇到一个中文,则将实际长度加一。
if ((int)str[clen] > 128) { realLen++; }
clen++;
}
#endregion

return realLen;
}

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-11-05 23:31
0

这个有好多方案的,Jquery的Validation表单验证是一个方案,可以自己写JavaScript或者Jquery验证或者直接在控件里面写入maxlength='20'也行!

收获园豆:5
Kencery | 园豆:357 (菜鸟二级) | 2012-11-05 07:14

谢谢回答!目前采用的是这种方式:参数就是要验证的输入框的值

public static int GetLength(string str)
{
if (str == null || str.Length == 0) { return 0; }

int l = str.Length;
int realLen = l;

#region 计算长度
int clen = 0;//当前长度
while (clen < l)
{
//每遇到一个中文,则将实际长度加一。
if ((int)str[clen] > 128) { realLen++; }
clen++;
}
#endregion

return realLen;
}

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-11-05 23:31
0

用maxlength, 如果是做长度验证的话前台js的同时后台也加一下验证

收获园豆:5
田林九村 | 园豆:2367 (老鸟四级) | 2012-11-05 07:52

谢谢回答!目前采用的是这种方式:参数就是要验证的输入框的值

public static int GetLength(string str)
{
if (str == null || str.Length == 0) { return 0; }

int l = str.Length;
int realLen = l;

#region 计算长度
int clen = 0;//当前长度
while (clen < l)
{
//每遇到一个中文,则将实际长度加一。
if ((int)str[clen] > 128) { realLen++; }
clen++;
}
#endregion

return realLen;
}

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-11-05 23:31
0

aspx 底下只能通过js验证,自带的好象不行

jason2013 | 园豆:1998 (小虾三级) | 2012-11-05 08:37

谢谢回答!

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-11-05 23:32
1

将中文替换成两个字符验证:

"中文".replace(/[\u4E00-\u9FA5]/gi, "00").length

收获园豆:5
向往-SONG | 园豆:4853 (老鸟四级) | 2012-11-05 09:05

正解,我们这边 一般这种栏位 在设计的时候不用varchar  用nvarchar。

支持(0) 反对(0) sym_cn | 园豆:798 (小虾三级) | 2012-11-05 09:28

谢谢回答!目前采用的是这种方式:参数就是要验证的输入框的值

public static int GetLength(string str)
{
if (str == null || str.Length == 0) { return 0; }

int l = str.Length;
int realLen = l;

#region 计算长度
int clen = 0;//当前长度
while (clen < l)
{
//每遇到一个中文,则将实际长度加一。
if ((int)str[clen] > 128) { realLen++; }
clen++;
}
#endregion

return realLen;
}

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-11-05 23:30
0

maxlength

同时在后台还需要进行验证

收获园豆:5
chenping2008 | 园豆:9836 (大侠五级) | 2012-11-05 09:06

谢谢回答!目前采用的是这种方式:参数就是要验证的输入框的值

public static int GetLength(string str)
{
if (str == null || str.Length == 0) { return 0; }

int l = str.Length;
int realLen = l;

#region 计算长度
int clen = 0;//当前长度
while (clen < l)
{
//每遇到一个中文,则将实际长度加一。
if ((int)str[clen] > 128) { realLen++; }
clen++;
}
#endregion

return realLen;
}

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-11-05 23:30
0

哈哈,我想是不是你数据的字段给的长度太小了,导致保存的时候会提示这样的错误。

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-11-05 10:23

是的,不过,这个只是一方面原因,最主要的还是要做一个输入最大长度的限制。谢谢回答!

支持(0) 反对(0) icyme | 园豆:77 (初学一级) | 2012-11-05 23:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册