天天看點

自己寫的js substr支援中文截取(中文是雙字元)

自己寫的js substr支援中文截取(中文是雙字元)

//得到字元總數  

function getchars(str) {  

    var i = 0;  

    var c = 0.0;  

    var unicode = 0;  

    var len = 0;  

    if (str == null || str == "") {  

        return 0;  

    }  

    len = str.length;  

    for(i = 0; i < len; i++) {  

            unicode = str.charcodeat(i);  

        if (unicode < 127) { //判斷是單字元還是雙字元  

            c += 1;  

        } else {  //chinese  

            c += 2;  

        }  

    return c;  

}  

function sb_strlen(str) {  

    return getchars(str);  

//截取字元  

function sb_substr(str, startp, endp) {  

    var i=0; c = 0; unicode=0; rstr = '';  

    var len = str.length;  

    var sblen = sb_strlen(str);  

    if (startp < 0) {  

        startp = sblen + startp;  

    if (endp < 1) {  

        endp = sblen + endp;// - ((str.charcodeat(len-1) < 127) ? 1 : 2);  

    // 尋找起點  

        if (c >= startp) {  

            break;  

        var unicode = str.charcodeat(i);  

        if (unicode < 127) {  

        } else {  

    // 開始取  

    for(i = i; i < len; i++) {  

        rstr += str.charat(i);  

        if (c >= endp) {  

    return rstr;  

//調用示例:  

function getshortfilename(filename) {  

    short_filename = filename;  

    if (sb_strlen(short_filename) > 61) {  

        short_filename = sb_substr(short_filename, 0, 36) + ' ... ' + sb_substr(short_filename, -20);  

    return short_filename;  

var chara = 'ni你2好1啊!'  

js_self = chara.substr(4);  

test = sb_substr(chara,4);  

alert("js_self:"+js_self+"ext:"+test);  

function mb_strlen(str) {  

    for(var i = 0; i < str.length; i++) {  

        len += str.charcodeat(i) < 0 || str.charcodeat(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;  

    return len;  

 <script language="javascript">  

<!--

function cutstrlength(str,ilength)

{

var tmp=0;

var len=0;

var oklen=0

for(var i=0;i<ilength;i++)

if(str.charcodeat(i)>255)

tmp+=2

else

len+=1

oklen+=1

if(tmp+len==ilength)

return (str.substring(0,oklen));

break;

}

if(tmp+len>ilength)

return (str.substring(0,oklen-1)+"");

function checkfieldlength(fieldname,fielddesc,fieldlength)

var str=document.getelementbyid(fieldname).value;

var thelen=0;

var teststr='';

for(i=0;i<str.length;i++)

teststr=str.charat(i);

thelen=thelen+2;

thelen=thelen+1;

document.getelementbyid('showmsg').innertext=thelen;

if(thelen>fieldlength)

document.getelementbyid('showmsg').innertext=fielddesc;

//alert(fielddesc+" 的字段長度超過規定長度!");

//document.getelementbyid(fieldname).focus();

document.getelementbyid(fieldname).value=cutstrlength(str,fieldlength);

return false;

return true;

//-->

</script>

</head>

<body>

<form method="post" action="">

<textarea id="testarea" name="testarea" rows="3" cols="22" onkeyup="checkfieldlength('testarea', '超過允許輸入的字元個數', 20);"

onchange="checkfieldlength('testarea', '超過允許輸入的字元個數', 20);"></textarea>

<div id="testinfo">

已經輸入:<span id="showmsg"></span></div>

</form>

</body>

</html>

繼續閱讀