String Palindrome Check in JavaScript

Lowercase, strip junk, reverse. 'A man a plan a canal Panama' should pass.

BeginnerString ProgramsExample 3 of 5
string-palindrome-check.js
1// Method 1: Compare with reversed string
2function isPalindrome1(str) {
3 str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
4 return str === str.split('').reverse().join('');
5}
6
7console.log("madam:", isPalindrome1("madam"));
8console.log("hello:", isPalindrome1("hello"));
9console.log("A man a plan:", isPalindrome1("A man a plan a canal Panama"));
10
11// Method 2: Two-pointer approach
12function isPalindrome2(str) {
13 str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
14 let left = 0;
15 let right = str.length - 1;
16
17 while (left < right) {
18 if (str[left] !== str[right]) {
19 return false;
20 }
21 left++;
22 right--;
23 }
24 return true;
25}
26
27console.log("\nTwo-pointer:");
28console.log("racecar:", isPalindrome2("racecar"));
29console.log("world:", isPalindrome2("world"));
30
31// Method 3: Recursive approach
32function isPalindrome3(str) {
33 str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
34
35 if (str.length <= 1) return true;
36 if (str[0] !== str[str.length - 1]) return false;
37
38 return isPalindrome3(str.slice(1, -1));
39}
40
41console.log("\nRecursive:");
42console.log("level:", isPalindrome3("level"));
43console.log("hello:", isPalindrome3("hello"));
44
45// Method 4: Using every method
46function isPalindrome4(str) {
47 str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
48 return str.split('').every((char, i) => {
49 return char === str[str.length - 1 - i];
50 });
51}
52
53console.log("\nUsing every:");
54console.log("deed:", isPalindrome4("deed"));

Output

madam: true
hello: false
A man a plan: true

Two-pointer:
racecar: true
world: false

Recursive:
level: true
hello: false

Using every:
deed: true

What's going on

Compare to its reverse after toLowerCase and dropping non-letters. Skip that and spaces kill it.