Is it a Palindrome?
💡 A palindrome is a word or sentence that's spelled the same way both forward and backward, ignoring punctuation, case, and spacing.
--- id: 657bdc55a322aae1eac3838f title: Build a Palindrome Checker challengeType: 14 forumTopicId: 16004 dashedName: build-a-palindrome-checker --- # --description-- A palindrome is a word or phrase that can be read the same way forwards and backwards, ignoring punctuation, case, and spacing. **Note:** You'll need to remove **all non-alphanumeric characters** (punctuation, spaces and symbols) and turn everything into the same case (lower or upper case) in order to check for palindromes. **Objective:** Build an app that is functionally similar to https://palindrome-checker.freecodecamp.rocks **User Stories:** 1. You should have an `input` element with an `id` of `"text-input"` 1. You should have a `button` element with an `id` of `"check-btn"` 1. You should have a `div` element with an `id` of `"result"` 1. When you click on the `#check-btn` element without entering a value into the `#text-input` element, an alert should appear with the text `"Please input a value"` 1. When the `#text-input` element only contains the letter `A` and the `#check-btn` element is clicked, the `#result` element should contain the text `"A is a palindrome"` 1. When the `#text-input` element contains the text `eye` and the `#check-btn` element is clicked, the `#result` element should contain the text `"eye is a palindrome"` 1. When the `#text-input` element contains the text `_eye` and the `#check-btn` element is clicked, the `#result` element should contain the text `"_eye is a palindrome"` 1. When the `#text-input` element contains the text `race car` and the `#check-btn` element is clicked, the `#result` element should contain the text `"race car is a palindrome"` 1. When the `#text-input` element contains the text `not a palindrome` and the `#check-btn` element is clicked, the `#result` element should contain the text `"not a palindrome is not a palindrome"` 1. When the `#test-input` element contains the text `A man, a plan, a canal. Panama` and the `#check-btn` element is clicked, the `#result` element should contain the text `"A man, a plan, a canal. Panama is a palindrome"` 1. When the `#text-input` element contains the text `never odd or even` and the `#check-btn` element is clicked, the `#result` element should contain the text `"never odd or even is a palindrome"` 1. When the `#text-input` element contains the text `nope` and the `#check-btn` element is clicked, the `#result` element should contain the text `"nope is not a palindrome"` 1. When the `#text-input` element contains the text `almostomla` and the `#check-btn` element is clicked, the `#result` element should contain the text `"almostomla is not a palindrome"` 1. When the `#text-input` element contains the text `My age is 0, 0 si ega ym.` and the `#check-btn` element is clicked, the `#result` element should contain the text `"My age is 0, 0 si ega ym. is a palindrome"` 1. When the `#text-input` element contains the text `1 eye for of 1 eye.` and the `#check-btn` element is clicked, the `#result` element should contain the text `"1 eye for of 1 eye. is not a palindrome"` 1. When the `#text-input` element contains the text `0_0 (: /-\ :) 0-0` and the `#check-btn` element is clicked, the `#result` element should contain the text `"0_0 (: /-\ :) 0-0 is a palindrome"` 1. When the `#text-input` element contains the text `five|\_/|four` and the `#check-btn` element is clicked, the `#result` element should contain the text `"five|\_/|four is not a palindrome"` Fulfill the user stories and pass all the tests below to complete this project. Give it your own personal style. Happy Coding! # --hints-- You should have an `input` element with an `id` of `"text-input"`. ```js const el = document.getElementById('text-input'); assert.strictEqual(el?.nodeName?.toLowerCase(), 'input'); ``` You should have a `button` element with an `id` of `"check-btn"`. ```js const el = document.getElementById('check-btn'); assert.strictEqual(el?.nodeName?.toLowerCase(), 'button'); ``` You should have a `div` element with an `id` of `result`. ```js const el = document.getElementById('result'); assert.strictEqual(el?.nodeName?.toLowerCase(), 'div'); ``` When you click on the `#check-btn` element without entering a value into the `#text-input` element, an alert should appear with the text `"Please input a value"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); let alertMessage; window.alert = (message) => alertMessage = message; // Override alert and store message inputEl.value = ''; checkBtn.click(); assert.strictEqual(alertMessage.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'please input a value'); ``` When the `#text-input` element only contains the letter `A` and the `#check-btn` element is clicked, the `#result` element should contain the text `"A is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'A'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'a is a palindrome'); ``` When the `#text-input` element contains the text `eye` and the `#check-btn` element is clicked, the `#result` element should contain the text `"eye is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'eye'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'eye is a palindrome'); ``` When the `#text-input` element contains the text `_eye` and the `#check-btn` element is clicked, the `#result` element should contain the text `"_eye is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = '_eye'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), '_eye is a palindrome'); ``` When the `#text-input` element contains the text `race car` and the `#check-btn` element is clicked, the `#result` element should contain the text `"race car is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'race car'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'race car is a palindrome'); ``` When the `#text-input` element contains the text `not a palindrome` and the `#check-btn` element is clicked, the `#result` element should contain the text `"not a palindrome is not a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'not a palindrome'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'not a palindrome is not a palindrome'); ``` When the `#test-input` element contains the text `A man, a plan, a canal. Panama` and the `#check-btn` element is clicked, the `#result` element should contain the text `"A man, a plan, a canal. Panama is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'A man, a plan, a canal. Panama'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'a man, a plan, a canal. panama is a palindrome'); ``` When the `#text-input` element contains the text `never odd or even` and the `#check-btn` element is clicked, the `#result` element should contain the text `"never odd or even is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'never odd or even'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'never odd or even is a palindrome'); ``` When the `#text-input` element contains the text `nope` and the `#check-btn` element is clicked, the `#result` element should contain the text `"nope is not a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'nope'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'nope is not a palindrome'); ``` When the `#text-input` element contains the text `almostomla` and the `#check-btn` element is clicked, the `#result` element should contain the text `"almostomla is not a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'almostomla'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'almostomla is not a palindrome'); ``` When the `#text-input` element contains the text `My age is 0, 0 si ega ym.` and the `#check-btn` element is clicked, the `#result` element should contain the text `"My age is 0, 0 si ega ym. is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'My age is 0, 0 si ega ym.'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'my age is 0, 0 si ega ym. is a palindrome'); ``` When the `#text-input` element contains the text `1 eye for of 1 eye.` and the `#check-btn` element is clicked, the `#result` element should contain the text `"1 eye for of 1 eye. is not a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = '1 eye for of 1 eye.'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), '1 eye for of 1 eye. is not a palindrome'); ``` When the `#text-input` element contains the text `0_0 (: /-\ :) 0-0` and the `#check-btn` element is clicked, the `#result` element should contain the text `"0_0 (: /-\ :) 0-0 is a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = '0_0 (: /-\ :) 0-0'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), '0_0 (: /-\ :) 0-0 is a palindrome'); ``` When the `#text-input` element contains the text `five|\_/|four` and the `#check-btn` element is clicked, the `#result` element should contain the text `"five|\_/|four is not a palindrome"`. ```js const inputEl = document.getElementById('text-input'); const checkBtn = document.getElementById('check-btn'); const resultEl = document.getElementById('result'); inputEl.value = 'five|\_/|four'; checkBtn.click(); assert.strictEqual(resultEl.innerText.trim().replace(/[.,?!]+$/g, '').toLowerCase(), 'five|\_/|four is not a palindrome'); ``` # --seed-- ## --seed-contents-- ```html ``` ```css ``` ```js ``` # --solutions-- ```html
💡 A palindrome is a word or sentence that's spelled the same way both forward and backward, ignoring punctuation, case, and spacing.