문자열의 모든 유니 코드 문자가 아래 범위에 포함되면 제거하려고합니다. 자바 스크립트에서 다양한 범위의 유니 코드 문자 제거
\uD800-\uDFFF
\u1D800-\u1DFFF
\u2D800-\u2DFFF
\u3D800-\u3DFFF
\u4D800-\u4DFFF
\u5D800-\u5DFFF
\u6D800-\u6DFFF
\u7D800-\u7DFFF
\u8D800-\u8DFFF
\u9D800-\u9DFFF
\uAD800-\uADFFF
\uBD800-\uBDFFF
\uCD800-\uCDFFF
\uDD800-\uDDFFF
\uED800-\uEDFFF
\uFD800-\uFDFFF
\u10D800-\u10DFFF
초기 프로토 타입으로, 난 그냥
replace
기능에 정규식을 사용하여 첫 번째 범위 내에서 문자를 제거하려고 노력했다.
var buffer = "he\udfffllo world";
var output = buffer.replace(/[\ud800-\udfff]/g, "");
d.innerText = buffer + " is replaced with " + output;
이 경우 문자가 잘 대체 된 것처럼 보입니다. 그러나
, 내가
var buffer = "he\udfffllo worl\u1dfffd";
var output = buffer.replace(/[\ud800-\udfff\u1d800-\u1dfff]/g, "");
d.innerText = buffer + " is replaced with " + output;
와 내가 예상치 못한 무언가를보고 있음을 교체합니다. \u1dff
가져 -
\u1dfff
하나 개의 문자로 표시되지 않습니다 : 헬로 worl᷿fd가로 대체
여기에서 주목해야 할 두 가지가 있습니다로 내 출력이 표시됩니다 문자로 변환되고 마지막에
f
은 자체 문자로 처리됩니다.- 결과는 빈 문자열입니다.
내가 어떻게이 작업을 수행 할 수 있는지에 대한 제안은 매우 감사하겠습니다.
편집
내 전반적인 목표는 encodeURIComponent
기능이 유효 고려 모든 문자를 필터링하는 것입니다. 나는 몇 가지 테스트를 실시하고 위의 목록이 유효하지 않은 문자 집합이라고 확인했습니다. 예를 들어, 아래 코드는 1dfff
을 유니 코드 문자로 변환 한 다음 encodeURIComponent
으로 전달하면 후자의 기능에 의해 예외가 발생합니다. @Blender 내가 유니 코드 문자를 표현하기 위해 x
대신 내 코드에 u
의를 사용하는 것을 지적 후
var v = String.fromCharCode(122879);
var uriComponent = encodeURIComponent(v);
나는 질문의 일부를 편집했다.
편집 2
나는 "무효"유니 코드가 더 범위를 가져 오는 내 기술을 조사하고 밝혀 당신이보다 큰 16 비트의 숫자를 String.fromCharacterCode
주면, 그것은거야 숫자의 가장 낮은 16 비트를 봅니다. 그것은 제가보고 있던 패턴을 설명합니다. 그래서 결국, 나는 첫 번째 범위에 대해서만 걱정할 필요가 있습니다.
'\ xdfff'이 \의 xdf','f'와'f''로 해석됩니다. – Blender
아하 네 말이 맞아, 왜 내가 두 번째 시도에서 이상한 결과를보고 있는지 설명해. 그 부분을 지금 바꾸는 것. –
'\ u1D800' 표기법과 다른 표기법의 대부분은 전혀 유효하지 않습니다. (기술적으로'\ u1D800'는 U + 1D80 다음에 0을 의미합니다.) 질문을 유니 코드 문자로 표기 해주십시오. –