Compare Two JavaScript Strings, Ignoring Case

Sep 4, 2020

Comparing two strings in JavaScript is easy: just use ===. But what if you want to treat uppercase and lowercase letters as equal, so is equivalent to

The most basic way to do case insensitive string comparison in JavaScript is using either the toLowerCase() or toUpperCase() method to make sure both strings are either all lowercase or all uppercase.

const str1 = '';
const str2 = '';

str1 === str2; // false
str1.toLowerCase() === str2.toLowerCase(); // true

Using localeCompare()

JavaScript's String#localeCompare() method gives you more fine-grained control over string comparison. For example, you can also compare two strings ignoring diacritics. Below is how you can do case-insensitive string comparison using localeCompare():

const str1 = '';
const str2 = '';

str1 === str2; // false

// 0, means these two strings are equal according to `localeCompare()`
str1.localeCompare(str2, undefined, { sensitivity: 'accent' });

The localeCompare() function is particularly useful if you want to sort an array of strings, ignoring case:

const strings = ['Alpha', 'Zeta', 'alpha', 'zeta'];

strings.sort((str1, str2) => str1.localeCompare(str2, undefined, { sensitivity: 'accent' }));

// Case insensitive sorting: ['Alpha', 'alpha', 'Zeta', 'zeta']

Don't Use Regular Expressions

You may be tempted to compare two strings using regular expressions and JavaScript regexp's i flag.

const str1 = '';
const str2 = '';

new RegExp('^' + str1 + '$', 'i').test(str2); // true

However, using this approach, you need to be careful to escape special regular expression characters. For example, the below comparison fails, whereas it would succeed using toLowerCase() or localeCompare().

const str1 = '[hello]';
const str2 = '[Hello]';

new RegExp('^' + str1 + '$', 'i').test(str2); // false

You're better off using toLowerCase() or localeCompare() than using a regular expression.

More Fundamentals Tutorials