eslint/no-misleading-character-class 정확성
작동 방식
이 규칙은 문자 클래스 문법에서 여러 코드 포인트로 구성된 문자를 포함한 정규 표현식을 보고합니다. 다음을 포함합니다:
- 결합 기호가 있는 문자 (예:
Á는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