JS 문자열은 모두 문자열 객체입니다. 문자열 객체의 길이 속성을 사용하여 길이를 얻을 수 있습니다. 그러나 중국어, 전각 기호 및 영어의 최소 길이 단위는 1이며 이는 PHP의 strlen( ).
function strlen(str) { var s = 0; for(var i = 0; i < str.length; i++) { if(str.charAt(i).match(/[u0391-uFFE5]/)) { s += 2; } else { s++; } } return s; }
각 문자를 캡처합니다. 전자와 한자가 일치하면 2자로 계산되고, 다른 문자와 일치하면 1자로 계산됩니다.
<script> alert (fucCheckLength("中国a")); function fucCheckLength(strTemp) { var i,sum; sum=0; for(i=0;i<strTemp.length;i++) { if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255)) sum=sum+1; else sum=sum+2; } return sum; } </script>
는 다음과 같은 결과를 얻습니다. 5. 얻고자 하는 바이트 길이 맞죠? 바이트와 문자의 차이에 유의하세요. 바이트 길이는 인코딩과 관련이 있습니다. 예를 들어 "China a", gbk/gb2312 인코딩은 5바이트이지만 UTF-8인 경우 7바이트(UTF-8 바이트 아래에는 일반적으로 한자 3자)입니다.
gbk의 모든 문자를 변환한 후 연산할 수 있습니다. 예시
function Utf8ToUnicode(strUtf8) { var bstr = ""; var nTotalChars = strUtf8.length; // total chars to be processed. var nOffset = 0; // processing point on strUtf8 var nRemainingBytes = nTotalChars; // how many bytes left to be converted var nOutputPosition = 0; var iCode, iCode1, iCode2; // the value of the unicode. while (nOffset < nTotalChars) { iCode = strUtf8.charCodeAt(nOffset); if ((iCode & 0x80) == 0) // 1 byte. { if ( nRemainingBytes < 1 ) // not enough data break; bstr += String.fromCharCode(iCode & 0x7F); nOffset ++; nRemainingBytes -= 1; } else if ((iCode & 0xE0) == 0xC0) // 2 bytes { iCode1 = strUtf8.charCodeAt(nOffset + 1); if ( nRemainingBytes < 2 || // not enough data (iCode1 & 0xC0) != 0x80 ) // invalid pattern { break; } bstr += String.fromCharCode(((iCode & 0x3F) << 6) | ( iCode1 & 0x3F)); nOffset += 2; nRemainingBytes -= 2; } else if ((iCode & 0xF0) == 0xE0) // 3 bytes { iCode1 = strUtf8.charCodeAt(nOffset + 1); iCode2 = strUtf8.charCodeAt(nOffset + 2); if ( nRemainingBytes < 3 || // not enough data (iCode1 & 0xC0) != 0x80 || // invalid pattern (iCode2 & 0xC0) != 0x80 ) { break; } bstr += String.fromCharCode(((iCode & 0x0F) << 12) | ((iCode1 & 0x3F) << 6) | (iCode2 & 0x3F)); nOffset += 3; nRemainingBytes -= 3; } else // 4 or more bytes -- unsupported break; } if (nRemainingBytes != 0) { // bad UTF8 string. return ""; } return bstr; }
이 문제를 해결하는 방법 이 기사에서는 js를 사용하여 한자의 길이를 구하는 방법을 소개합니다
, 우리는 새로운 getBytes() 함수를 정의하여 문자열의 바이트 수를 얻습니다. JavaScript에서 이 함수는 표준 함수입니다.
String.prototype.getBytes = function() { var cArr = this.match(/[^x00-xff]/ig); return this.length + (cArr == null ? 0 : cArr.length); } function paramCheck(cur){ if(cur.value.getBytes() > 64){ alert("字符超过64个字符"); return false; } return true; }
getBytes는 정규 표현식을 사용하여 문자열에 포함된 한자의 수를 결정합니다. 포함된 한자는 cArr 배열에 배치되므로 cArr의 길이는 총 한자의 수입니다. getBytes 메소드는 길이에 중국어 문자 수(총 바이트 수)를 더한 값을 반환합니다.
그냥 [^x00-xff]를 사용하세요. 이는 약간 역겹습니다. } 등과 같은 일부 특수 문자도 일치할 수 있습니다.
그러나 [^u4E00-u9FA5]를 사용하면 중국어를 일치시킬 수 없습니다...
다음은 테스트할 수 있는 몇 가지 다른 방법입니다.
하나:
function _length(str){ var len=0; for(var i=0;i<str.length;i++){ if(str.charAt(i)>'~'){len+=2;}else{len++;} } return len; }
두 가지 유형:
String.prototype.gblen = function() { var len = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len += 2; } else { len ++; } } return len; } String.prototype.gbtrim = function(len, s) { var str = ''; var sp = s || ''; var len2 = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len2 += 2; } else { len2 ++; } } if (len2 <= len) { return this; } len2 = 0; len = (len > sp.length) ? len-sp.length: len; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len2 += 2; } else { len2 ++; } if (len2 > len) { str += sp; break; } str += this.charAt(i); } return str; } var str1 = '世上最牛的@#%&们 世上最牛的@#%&们'; document.write('str1 = '+ str1 +' '); document.write('length = '+ str1.gblen() +' '); document.write('gbtrim(10) = '+ str1.gbtrim(10) +' '); document.write('gbtrim(10, \'…\') = '+ str1.gbtrim(10, '…') +' '); document.write('gbtrim(12, \'-\' ) = '+ str1.gbtrim(12, '-') +' '); // gbtrim(len 截取长度,按英文字节长度计算, s截取后的省略字符,如"…" ) // 备注: 这里中文字符都是当作两个长度来计算的,所以gbtrim中的len为10时,是显示最多5个汉字的。 // 当汉字数大于5时,由于截取后加上“…”,所以只显示4个汉字。
한자의 길이를 결정하는 더 많은 자바스크립트 함수 코드를 보려면 PHP 중국어 웹사이트의 관련 기사에 주목하세요!