????
??? 做項目時自己寫一段js給大家。關于文本限制字數的問題,在實際開發中經常用到;主要問題出現在對中文的限制,因為大多數據庫都是按字節限制,而web中屬性maxlength限制個數,非字節數,因此遇到中文就會出問題。下面代碼就解決關于限制字節數的校驗問題;只要將此下代碼保存到一個js文件中并引入到校驗的頁面中,便可使用!同時希望大家給與大力支持和寶貴意見,本人會在今后閑余之際,發表更多的好文章,謝謝!!
/*
?value:?值;
?byteLength:數據庫字節長度
?title:字段中文名稱
?attribute:屬性名稱
?使用方法說明:
添加?(1)?onkeyup="limitLength(this.value,100,'名稱','name')"
??????????(2)??id="name"?或【struts標簽】styleId="name"
?注意:id名稱和?attribute屬性名稱要一樣
?????
?例子:<textarea??name="explain"?id="explain"?onkeyup="limitLength(value,5,'語義說明','explain')"?>?
?或
<input?type="text"???name="explain"??id="explain"?onkeyup="limitLength(value,5,'語義說明','explain')"?>
*/
function ?limitLength(value,?byteLength,?title,?attribute)?{
??????? var ?newvalue? = ?value.replace( / [ ^ \x00 - \xff] / g,? " ** " );
??????? var ?length? = ?newvalue.length;
?
??????? // 當填寫的字節數小于設置的字節數
?????? if ?(length? * ? 1 ? <= byteLength? * ? 1 ){
???????????? return ;
??????}
?????? var ?limitDate? = ?newvalue.substr( 0 ,?byteLength);
?????? var ?count? = ? 0 ;
?????? var ?limitvalue? = ? "" ;
????? for ?( var ?i? = ? 0 ;?i? < ?limitDate.length;?i ++ )?{
????????????? var ?flat? = ?limitDate.substr(i,? 1 );
???????????? if ?(flat? == ? " * " )?{
??????????????????count ++ ;
????????????}
?????}
????? var ?size? = ? 0 ;
????? var ?istar? = ?newvalue.substr(byteLength? * ? 1 ? - ? 1 ,? 1 ); // 校驗點是否為“×”
??
???? // if?基點是×;?判斷在基點內有×為偶數還是奇數?
????? if ?(count? % ? 2 ? == ? 0 )?{
?????????????? // 當為偶數時
????????????size? = ?count? / ? 2 ? + ?(byteLength? * ? 1 ? - ?count);
????????????limitvalue? = ?value.substr( 0 ,?size);
????}? else ?{
???????????? // 當為奇數時
????????????size? = ?(count? - ? 1 )? / ? 2 ? + ?(byteLength? * ? 1 ? - ?count);
????????????limitvalue? = ?value.substr( 0 ,?size);
????}
???alert(title? + ? " 最大輸入 " ? + ?byteLength? + ? " 個字節(相當于 " + byteLength? / 2 + " 個漢字)! " );
???document.getElementById(attribute).value? = ?limitvalue;
??? return ;
}
?value:?值;
?byteLength:數據庫字節長度
?title:字段中文名稱
?attribute:屬性名稱
?使用方法說明:
添加?(1)?onkeyup="limitLength(this.value,100,'名稱','name')"
??????????(2)??id="name"?或【struts標簽】styleId="name"
?注意:id名稱和?attribute屬性名稱要一樣
?????
?例子:<textarea??name="explain"?id="explain"?onkeyup="limitLength(value,5,'語義說明','explain')"?>?
?或
<input?type="text"???name="explain"??id="explain"?onkeyup="limitLength(value,5,'語義說明','explain')"?>
*/
function ?limitLength(value,?byteLength,?title,?attribute)?{
??????? var ?newvalue? = ?value.replace( / [ ^ \x00 - \xff] / g,? " ** " );
??????? var ?length? = ?newvalue.length;
?
??????? // 當填寫的字節數小于設置的字節數
?????? if ?(length? * ? 1 ? <= byteLength? * ? 1 ){
???????????? return ;
??????}
?????? var ?limitDate? = ?newvalue.substr( 0 ,?byteLength);
?????? var ?count? = ? 0 ;
?????? var ?limitvalue? = ? "" ;
????? for ?( var ?i? = ? 0 ;?i? < ?limitDate.length;?i ++ )?{
????????????? var ?flat? = ?limitDate.substr(i,? 1 );
???????????? if ?(flat? == ? " * " )?{
??????????????????count ++ ;
????????????}
?????}
????? var ?size? = ? 0 ;
????? var ?istar? = ?newvalue.substr(byteLength? * ? 1 ? - ? 1 ,? 1 ); // 校驗點是否為“×”
??
???? // if?基點是×;?判斷在基點內有×為偶數還是奇數?
????? if ?(count? % ? 2 ? == ? 0 )?{
?????????????? // 當為偶數時
????????????size? = ?count? / ? 2 ? + ?(byteLength? * ? 1 ? - ?count);
????????????limitvalue? = ?value.substr( 0 ,?size);
????}? else ?{
???????????? // 當為奇數時
????????????size? = ?(count? - ? 1 )? / ? 2 ? + ?(byteLength? * ? 1 ? - ?count);
????????????limitvalue? = ?value.substr( 0 ,?size);
????}
???alert(title? + ? " 最大輸入 " ? + ?byteLength? + ? " 個字節(相當于 " + byteLength? / 2 + " 個漢字)! " );
???document.getElementById(attribute).value? = ?limitvalue;
??? return ;
}