code

JavaScript 문자열에서 너비가 0 인 공백 문자 제거

codestyles 2021. 1. 7. 07:59
반응형

JavaScript 문자열에서 너비가 0 인 공백 문자 제거


사용자 입력 (JS 코드)을 받아 실시간으로 실행 (처리)하여 일부 출력을 표시합니다.

때로는 코드에 너비가 0 인 공간이 있는데 정말 이상합니다. 사용자가 어떻게 입력하는지 모르겠습니다. 예 - "(​$".length === 3

JS의 코드에서 해당 문자를 제거 할 수 있어야합니다. 어떻게해야합니까? 또는 브라우저가 0 너비 공백 문자를 고려하지 않도록 JS 코드를 실행하는 다른 방법이 있습니까?


유니 코드에는 다음과 같은 제로 너비 문자가 있습니다.

  • U + 200B 제로 너비 공간
  • U + 200C 너비가 0 인 비결 합자 유니 코드 코드 포인트
  • U + 200D 제로 너비 결합 자 유니 코드 코드 포인트
  • U + FEFF 너비가 0 인 줄 바꿈없는 공백 유니 코드 코드 포인트

JavaScript의 문자열에서 제거하려면 간단한 정규식을 사용할 수 있습니다.

var userInput = 'a\u200Bb\u200Cc\u200Dd\uFEFFe';
console.log(userInput.length); // 9
var result = userInput.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(result.length); // 5

표시되지 않을 수있는 더 많은 기호가 있습니다. 예를 들어 ASCII의 제어 문자 중 일부입니다 .


일부 보이지 않는 문자가 내 JSON을 손상시키고 내 사이트를 충돌 시키는 예기치 않은 토큰 ILLEGAL 예외를 발생시키는 문제가있었습니다 .

RegExp 변수를 사용하는 내 솔루션은 다음과 같습니다.

    var re = new RegExp("\u2028|\u2029");
    var result = text.replace(re, '');

Javascript 및 제로 너비 공백에 대한 자세한 내용은 여기에서 찾을 수 있습니다. 제로 너비 공백


str.replace(/\u200B/g,'');

200B는 너비가 0 인 공간 8203의 16 진수입니다.이를 제거하려면 빈 문자열로 바꾸십시오.


[].filter.call( str, function( c ) {
    return c.charCodeAt( 0 ) !== 8203;
} );

8203 문자 코드 (폭이 0 인 유니 코드 번호)를 제거하려면 각 문자를 필터링하십시오.

참조 URL : https://stackoverflow.com/questions/11305797/remove-zero-width-space-characters-from-a-javascript-string

반응형