>  기사  >  웹 프론트엔드  >  js는 중국어 문자가 포함된 문자열을 처리합니다.

js는 중국어 문자가 포함된 문자열을 처리합니다.

一个新手
一个新手원래의
2017-10-12 09:36:161239검색

시나리오:

js의 문자열 유형과 함께 제공되는 속성 길이는 문자열의 문자 수를 가져오지만 프런트 엔드에서는 문자열 표시 길이를 한자 약 1개로 제한해야 하는 경우가 많습니다. 두 개의 영어 소문자 표시 위치이므로 중국어와 영어가 혼합된 경우 표시 길이를 판단하기 위해 길이 값을 사용하는 것이 올바르지 않은 경우가 많습니다.

기존 솔루션은 문자열을 순회하는 것입니다. 한자는 길이 2로 계산되고, 한자가 아닌 문자는 길이 1로 계산되며, 문자열의 표시 길이는 새로 계산된 길이의 합으로 제한됩니다. 코드를 보세요↓↓↓

var Tools ={    //是否包含中文
    hasZh: function(str){        
    for(var i = 0;i < str.length; i++)
        {            
        if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
                return true;            
                return false;
        }
    },    //重新计算长度,中文+2,英文+1
    getlen: function(str){       
    var strlen = 0;        
    for(var i = 0;i < str.length; i++)
        {            
        if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
                strlen += 2;            
                else
                strlen++;
        }        return strlen;
    },    //限制长度
    limitlen: function(str, len){        
    var result = "";        
    var strlen = 0;        
    for(var i = 0;i < str.length; i++)
        {            
        if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
                strlen += 2;            
                else
                strlen++;

            result += str.substr(i,1);            
            if(strlen >= len){                
            break;
            }
        }        return result;
    }
}

이 방법의 원리는 중국어와 영어의 유니코드 인코딩 범위가 다르기 때문에 중국어는 2바이트, 영어는 1바이트를 차지하므로 중국어 유니코드 인코딩 값은 2^보다 커야 합니다. 8-1=255.

위 방법은 더 엄격할 수 있습니다. 유니코드 인코딩 범위를 고려하세요. 구체적인 범위는 유니코드 표에서 확인할 수 있습니다.

PS: 16진수로 된 한자의 유니코드 인코딩 범위는 4E00-9FA5이며, 10진수로는 다음과 같습니다. 19968-40869, 즉 중국어를 판단하는 정확한 표현은

str.charCodeAt(i)>=19968 && str.charCodeAt(i)<=40869

너무 엄격하지 않은 단어를 삽입하는 것입니다. 코드는 너무 엄격할 필요는 없습니다. 결국 사용자가 어떤 이상한 일을 하는지 알 수 없습니다. 테스트)가 손실됩니다.

위 내용은 js는 중국어 문자가 포함된 문자열을 처리합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.