Skip to content
← Back to rules

eslint/no-misleading-character-class 정확성

This rule is turned on by default.
An auto-fix is available for this rule.

작동 방식

이 규칙은 문자 클래스 문법에서 여러 코드 포인트로 구성된 문자를 포함한 정규 표현식을 보고합니다. 다음을 포함합니다:

  • 결합 기호가 있는 문자 (예: ÁA 뒤에 결합 급상승 기호가 오는 경우)
  • 이모지 수정자 포함 문자 (예: 👶🏻)
  • 지역 지표 기호의 쌍 (예: 🇯🇵)
  • 영역 없음 연결자 (ZWJ)로 연결된 문자 (예: 👨‍👩‍👦)
  • 유니코드 플래그 없이 서보그레이트 쌍 사용 (예: /^[👍]$/)

왜 문제인가요?

유니코드에는 여러 코드 포인트로 이루어진 문자가 포함되어 있습니다.
рег엑스 문자 클래스 문법 (/[abc]/)은 여러 코드 포인트로 이루어진 문자를 하나의 문자로 처리할 수 없습니다.
이러한 문자들은 각각의 코드 포인트로 분해됩니다. 예를 들어, ❇️ (U+2747)와 변형 선택자-16 (U+FE0F)로 구성됩니다.
만약 이 문자가 정규 표현식의 문자 클래스 내에 있다면, (U+2747) 또는 변형 선택자-16 (U+FE0F) 중 하나만 일치하게 되며, 전체 ❇️는 일치하지 않습니다.

이는 특히 이모지, 지역 지표 및 결합 기호가 있는 문자에 대해 작성자가 의도한 바와 다르게 매칭되는 정규 표현식을 초래할 수 있습니다.

예시

이 규칙에 대한 잘못된 코드 예시:

javascript
/^[Á]$/u;
/^[❇️]$/u;
/^[👶🏻]$/u;
/^[🇯🇵]$/u;
/^[👨‍👩‍👦]$/u;
new RegExp("[🎵]");

이 규칙에 대한 올바른 코드 예시:

javascript
/^[abc]$/;
/^[👍]$/u;
/[\u00B7\u0300-\u036F]/u;
new RegExp("^[\u{1F1EF}\u{1F1F5}]", "u");

구성

이 규칙은 다음과 같은 속성을 가진 구성 객체를 수용합니다.

allowEscape

type: boolean

기본값: false

true로 설정하면, 이스케이프 시퀀스를 사용하여 쓰여진 경우 문자 클래스 내의 어떤 코드 포인트 그룹화도 허용합니다.

{ "allowEscape": true } 설정 시 이 규칙에 대한 잘못된 코드 예시:

javascript
/[\uD83D]/; // 백슬래시 생략 가능
new RegExp("[\ud83d" + "\udc4d]");

{ "allowEscape": true } 설정 시 이 규칙에 대한 올바른 코드 예시:

javascript
/[\ud83d\udc4d]/;
/[\u00B7\u0300-\u036F]/u;
/[👨\u200d👩]/u;
new RegExp("[\x41\u0301]");
new RegExp(`[\u{1F1EF}\u{1F1F5}]`, "u");
new RegExp("[\\u{1F1EF}\\u{1F1F5}]", "u");

사용 방법

이 규칙을 활성화하려면 구성 파일 또는 명령줄 인터페이스에서 다음을 사용할 수 있습니다:

json
{
  "rules": {
    "no-misleading-character-class": "error"
  }
}
bash
oxlint --deny no-misleading-character-class

참고 자료