한자의 길이를 결정하는 JavaScript 함수 코드
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 중국어 웹사이트의 관련 기사에 주목하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











기사는 JavaScript 라이브러리 작성, 게시 및 유지 관리, 계획, 개발, 테스트, 문서 및 홍보 전략에 중점을 둡니다.

이 기사는 브라우저에서 JavaScript 성능을 최적화하기위한 전략에 대해 설명하고 실행 시간을 줄이고 페이지로드 속도에 미치는 영향을 최소화하는 데 중점을 둡니다.

프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

이 기사는 브라우저 개발자 도구를 사용하여 효과적인 JavaScript 디버깅, 중단 점 설정, 콘솔 사용 및 성능 분석에 중점을 둡니다.

이 기사는 Java의 컬렉션 프레임 워크의 효과적인 사용을 탐구합니다. 데이터 구조, 성능 요구 및 스레드 안전을 기반으로 적절한 컬렉션 (목록, 세트, 맵, 큐)을 선택하는 것을 강조합니다. 효율적인 수집 사용을 최적화합니다

이 기사는 소스 맵을 사용하여 원래 코드에 다시 매핑하여 미니어링 된 JavaScript를 디버그하는 방법을 설명합니다. 소스 맵 활성화, 브레이크 포인트 설정 및 Chrome Devtools 및 Webpack과 같은 도구 사용에 대해 설명합니다.

엔트리 레벨 타입 스크립트 자습서를 마스터 한 후에는 TypeScript를 지원하고 JavaScript로 컴파일하는 IDE에서 자신의 코드를 작성할 수 있어야합니다. 이 튜토리얼은 TypeScript의 다양한 데이터 유형으로 뛰어납니다. JavaScript에는 NULL, UNDEFINED, BOOLEAN, 번호, 문자열, 기호 (ES6에 의해 소개 됨) 및 객체의 7 가지 데이터 유형이 있습니다. TypeScript는이 기반으로 더 많은 유형을 정의 하며이 튜토리얼은이 모든 튜토리얼을 자세히 다룹니다. 널 데이터 유형 JavaScript와 마찬가지로 Null in TypeScript

이 튜토리얼은 Chart.js를 사용하여 파이, 링 및 버블 차트를 만드는 방법을 설명합니다. 이전에는 차트 유형의 차트 유형을 배웠습니다. JS : 라인 차트 및 막대 차트 (자습서 2)와 레이더 차트 및 극지 지역 차트 (자습서 3)를 배웠습니다. 파이 및 링 차트를 만듭니다 파이 차트와 링 차트는 다른 부분으로 나뉘어 진 전체의 비율을 보여주는 데 이상적입니다. 예를 들어, 파이 차트는 사파리에서 남성 사자, 여성 사자 및 젊은 사자의 비율 또는 선거에서 다른 후보자가받는 투표율을 보여주는 데 사용될 수 있습니다. 파이 차트는 단일 매개 변수 또는 데이터 세트를 비교하는 데만 적합합니다. 파이 차트의 팬 각도는 데이터 포인트의 숫자 크기에 의존하기 때문에 원형 차트는 값이 0 인 엔티티를 그릴 수 없습니다. 이것은 비율이 0 인 모든 엔티티를 의미합니다
