Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Write a palindrome program in JavaScript so that only alphanumeric values should be allowed?
A palindrome is a string that reads the same forwards and backwards. When checking palindromes with alphanumeric characters only, we need to ignore spaces, punctuation, and special characters, considering only letters (a-z) and digits (0-9).
For example, "A man, a plan, a canal: Panama" becomes "amanaplanacanalpanama" after removing non-alphanumeric characters, which is indeed a palindrome.
Basic Palindrome Check
Here's a simple approach using string manipulation methods to check if a string is a palindrome:
<!DOCTYPE html>
<html>
<body>
<script>
var str = "racecar";
var splitstr = str.split("");
var revstr = splitstr.reverse();
var joinstr = revstr.join("");
if(str === joinstr){
document.write("String is a palindrome");
} else {
document.write("String is not a palindrome");
}
</script>
</body>
</html>
String is a palindrome
Alphanumeric Palindrome Using Regular Expressions
Regular expressions help us filter out non-alphanumeric characters before checking for palindromes. The pattern /[^A-Za-z0-9]/g matches any character that is not a letter or digit.
Steps to Follow
- Convert the string to lowercase for case-insensitive comparison
- Remove all non-alphanumeric characters using regex
- Reverse the cleaned string
- Compare the original cleaned string with its reverse
Method 1: Using /[\W_]/g Pattern
The [\W_] pattern matches non-word characters and underscores:
<!DOCTYPE html>
<html>
<body>
<script>
var str = 'A man, a plan, a canal: Panama';
var reg = /[\W_]/g;
var newstr = str.toLowerCase().replace(reg, "");
document.write("Cleaned string: " + newstr + "<br>");
var strsplit = newstr.split("");
var revstr = strsplit.reverse();
var joinstr = revstr.join("");
if(joinstr === newstr){
document.write("String is a palindrome");
} else {
document.write("String is not a palindrome");
}
</script>
</body>
</html>
Cleaned string: amanaplanacanalpanama String is a palindrome
Method 2: Using /[^A-Za-z0-9]/g Pattern
This pattern explicitly defines what to remove - anything that's not a letter or digit:
<!DOCTYPE html>
<html>
<body>
<script>
var str = 'Race a car';
var reg = /[^A-Za-z0-9]/g;
var newstr = str.toLowerCase().replace(reg, "");
document.write("Cleaned string: " + newstr + "<br>");
var strsplit = newstr.split("");
var revstr = strsplit.reverse();
var joinstr = revstr.join("");
if(joinstr === newstr){
document.write("String is a palindrome");
} else {
document.write("String is not a palindrome");
}
</script>
</body>
</html>
Cleaned string: raceacar String is not a palindrome
Complete Function Example
Here's a reusable function to check alphanumeric palindromes:
<!DOCTYPE html>
<html>
<body>
<script>
function isPalindrome(str) {
// Remove non-alphanumeric characters and convert to lowercase
var cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, '');
// Reverse the cleaned string
var reversed = cleaned.split('').reverse().join('');
return cleaned === reversed;
}
// Test with different strings
var testStrings = [
"A man, a plan, a canal: Panama",
"race a car",
"Madam",
"121Malayalam121"
];
testStrings.forEach(function(test) {
var result = isPalindrome(test) ? "is" : "is not";
document.write('"' + test + '" ' + result + ' a palindrome<br>');
});
</script>
</body>
</html>
"A man, a plan, a canal: Panama" is a palindrome "race a car" is not a palindrome "Madam" is a palindrome "121Malayalam121" is a palindrome
Comparison of Regex Patterns
| Pattern | Description | Removes |
|---|---|---|
/[\W_]/g |
Non-word characters and underscores | Spaces, punctuation, symbols, underscores |
/[^A-Za-z0-9]/g |
Anything not alphanumeric | Everything except letters and digits |
Conclusion
Use regular expressions to clean strings before palindrome checking. The /[^A-Za-z0-9]/g pattern is more explicit and reliable for ensuring only alphanumeric characters remain in your palindrome validation.
