Character classes in a regular expression should not have duplicate characters

  • DUPLICATES_IN_CHARACTER_CLASS
  • Code Quality
  • Medium, Low
  • No tags

This rule applies when a character class in a regular expression has duplicate characters.

A character class, also called character set, is specified using square brackets []. It matches exactly one character among the characters appearing inside the square brackets.

It is recommended to remove duplicate characters in a character class because the same set of characters is specified without the duplicates.
Moreover, the duplicates may be caused by a programmer's misunderstanding of characters like |, ,, ( and ), which have no special meaning inside a character class.

If you intended an exact match of duplicate characters, you need to use capturing parentheses ().

Noncompliant Code Example

View with compliant examples side by side
function isOdd(str) {
    return /^\d*[1|3|5|7|9]$/.test(str); // DUPLICATES_IN_CHARACTER_CLASS alarm because '|' appears multiple times.
}

function endsWithDeepOrScan(word) {
    return /[deep|scan]$/i.test(word) // DUPLICATES_IN_CHARACTER_CLASS alarm because 'e' appears multiple times.
}

Compliant Code Example

View with noncompliant examples side by side
function isOdd(str) {
    return /^\d*[13579]$/.test(str);
}

function endsWithDeepOrScan(word) {
    return /(deep|scan)$/i.test(word)
}

Version

This rule was introduced in DeepScan 1.26.0.

See