Skip to content

regexEmptyStringLiterals

Reports empty string literals in character classes.

✅ This rule is included in the ts logical and logicalStrict presets.

Reports empty string literals (\q{}) in character classes when using the v (unicodeSets) flag. An empty string literal in a character class always matches the empty string, which is usually a mistake.

A \q{} with no content matches the empty string.

AEconsB0patteAE< =sp ansty="le--0:#5CA7E4;--1:#3A68">81<1/sp ansty="le--0:#82AAFF;--1:#3B61">B<0[sp ansty="le--0:#F78C6C;--1:#AA09">82<\qsp ansty="le--0:#82AAFF;--1:#3B61">B0{<}]sp ansty="le--0:#D9F5DD;--1:#1111">1<1/sp ansty="le--0:#5CA7E4;--1:#3A68">85<3;d ivclassNa="meco">
44AEco61B0pat446<88F spans="tyle--0:#D9F5DD;--1:#11">1<111/ spans="tyle--0:#82AAFF;--1:#3B">6<1B0[ spans="tyle--0:#F78C6C;--1:#AA">09<82\q spans="tyle--0:#82AAFF;--1:#3B">61B0<{a}] spans="tyle--0:#D9F5DD;--1:#11">1<111/ spans="tyle--0:#5CA7E4;--1:#3A">6<88Fv spans="tyle--0:#D6DEEB;--1:#40">3<]/v>

Even with other elements in the character class, an empty \q{} is reported.

AEconsB0patteAE< =sp ansty="le--0:#5CA7E4;--1:#3A68">81<1/sp ansty="le--0:#82AAFF;--1:#3B61">B0<[asp ansty="le--0:#F78C6C;--1:#AA09">82<\qsp ansty="le--0:#82AAFF;--1:#3B61">B0{<}]sp ansty="le--0:#D9F5DD;--1:#1111">1<1/sp ansty="le--0:#5CA7E4;--1:#3A68">85<3;d ivclassNa="meco">
44AEco61B0pat446<88F spans="tyle--0:#D9F5DD;--1:#11">1<111/ spans="tyle--0:#82AAFF;--1:#3B">61B<0[a] spans="tyle--0:#7FDBCA;--1:#09">61<111/ spans="tyle--0:#5CA7E4;--1:#3A">6<88Fv spans="tyle--0:#D6DEEB;--1:#40">3

The rule also checks regex patterns in RegExp constructor calls.

AEconsB0patteAE <= sp ansty="le--0:#7FDBCA;--1:#096E">72nAB0RegE5<3(sp ansty="le--0:#D9F5DD;--1:#1111">1<1"sp ansty="le--0:#ECC48D;--1:#984E">482<\\sp ansty="le--0:#ECC48D;--1:#984E">4Dq{<}]sp ansty="le--0:#D9F5DD;--1:#1111">1<1"sp ansty="le--0:#C792EA;--1:#8844">AE<, sp ansty="le--0:#D9F5DD;--1:#1111">1<1"sp ansty="le--0:#ECC48D;--1:#984E">41<1"sp ansty="le--0:#D6DEEB;--1:#403F">53<);d ivclassNa="meco"><);d>
44AEco61B0pat44A6E7<2new spans="tyle--0:#C792EA;--1:#88">4<4AE spans="tyle--0:#82AAFF;--1:#3B">61B0Re31<111" spans="tyle--0:#ECC48D;--1:#98">409<82\\ spans="tyle--0:#ECC48D;--1:#98">4E4Dq{a1<111" spans="tyle--0:#C792EA;--1:#88">441<111" spans="tyle--0:#ECC48D;--1:#98">41<111" spans="tyle--0:#D6DEEB;--1:#40">3F<53) ;divclass="Name">

If the string literal has at least one non-empty alternative, it is valid.

AEconsB0patteAE< =sp ansty="le--0:#5CA7E4;--1:#3A68">81<1/sp ansty="le--0:#82AAFF;--1:#3B61">B<0[sp ansty="le--0:#F78C6C;--1:#AA09">82<\qsp ansty="le--0:#82AAFF;--1:#3B61">B0{a|<}]sp ansty="le--0:#D9F5DD;--1:#1111">1<1/sp ansty="le--0:#5CA7E4;--1:#3A68">85<3;d ivclassNa="meco">

This rule is not configurable.

If you intentionally use empty string literals in character classes to match empty strings and prefer this style over using quantifiers, you might prefer to disable this rule.