한 동료가 회사 OA에 자바스크립트에서 중국어와 영어가 혼합된 문자열의 길이를 구하는 방법을 소개하는 글을 올렸습니다.
은 정규 표현식을 사용합니다.
var str = "tank는 음역입니다. 탱크";
var len = str.match(/[^ -~]/g) == null ? str.length : str.length str.match(/[^ -~]/g).length ;
책을 확인하고 조금 알아냈습니다.
일반적으로 사용되는 서양 문자 집합은 공백 " "(0x20)부터 "~"(0x7e)까지로 구성됩니다. 이 문자 집합 외부에 속합니다. 정규식 [^ -~]는 "~"에 대한 공백을 제외한 문자 집합을 나타냅니다.
string.match(regex)는 문자를 반환합니다. 배열 형태로 문자열은 정규 표현식 regex의 하위 문자열과 일치합니다. 따라서
str.match(/[^ -~]/g)는 한자를 배열 형태로 하나씩 반환합니다. 예를 들어
var str = "dd Brother";//"big Brother" 표시, 배열에 두 개의 한자를 반환하고 배열 길이는 2입니다.
alert(str.match(/[^ - ~] /g));
이런 식으로 var len = str.match(/[^ -~]/g) == null ? str.length : str.length str.match (/[^ -~]/g).length ;str의 올바른 길이를 얻을 수 있습니다.
자바스크립트에서도 한자의 길이를 1로 계산하는데, 이로 인해 데이터베이스에 제출할 때 표준 길이를 초과하는 오류가 자주 발생하는데요. 이제 이 방법을 사용하면 제출하기 전에 확인할 수 있습니다.
참고: 위 코드의 일부 기호에 문제가 있어 수정 후 다음 기능으로 변경되었습니다.
function get_strlength(str)
{
var len = 0;
if (str.match(/[^ -~]/g) == null)
{
len = str.length
}
else
{
len = str.length str.match(/[^ -~]/g).length
}
return len; 🎜>