Ignoring spaces and punctuation from palindrome script

Discussion in 'JavaScript' started by Maurovz, Dec 6, 2009.

  1. #1
    I got the following script that checks if a phrase is Palindrome or not:

    <script type="text/javascript" language="JavaScript">

    function check(){
    var x = isPalindrome(document.palinForm.inputWord.value);
    document.palinForm.isPalin.value = x;
    alert(x);
    return true;
    }

    function isPalindrome(x) {
    var rString = "";
    var alen = x.length;
    for (var i = alen ; i > 0 ; i--){
    rString += x.charAt(i-1)
    };
    return (x == rString);
    }
    </script>


    The problem is that it only works if the phrase has no spaces, comas, periods or even caps... for example: A man, a plan, a canal: Panama. would come out false because it's not in this order: amanaplanacanalpanama

    how can I fix this?
     
    Maurovz, Dec 6, 2009 IP
  2. s_ruben

    s_ruben Active Member

    Messages:
    735
    Likes Received:
    26
    Best Answers:
    1
    Trophy Points:
    78
    #2
    Try this code
    
    <script type="text/javascript" language="JavaScript">
    function check(){
    var x = isPalindrome(document.palinForm.inputWord.value);
    document.palinForm.isPalin.value = x;
    alert(x);
    return true;
    }
    
    function isPalindrome(x) {
    var rString = "";
    var alen = x.length;
    for (var i = alen ; i > 0 ; i--){
      if(alphanumeric(x.charAt(i-1))){
        rString += x.charAt(i-1)
      }
    };
    
    var nString = "";
    for (var i = 0 ; i < alen ; i++){
      if(alphanumeric(x.charAt(i))){
        nString += x.charAt(i)
      }
    };
    
    return (nString.toLowerCase() == rString.toLowerCase());
    }
    
    function alphanumeric(alphane){
    	var numaric = alphane;
    	for(var j=0; j<numaric.length; j++){
    	    var alphaa = numaric.charAt(j);
    		var hh = alphaa.charCodeAt(0);
    		if((hh > 47 && hh<58) || (hh > 64 && hh<91) || (hh > 96 && hh<123)){
    		}
    		else{
    		    return false;
    		}
     	}
    
     return true;
    }
    
    </script>
    
    Code (markup):
     
    s_ruben, Dec 6, 2009 IP
  3. camjohnson95

    camjohnson95 Active Member

    Messages:
    737
    Likes Received:
    17
    Best Answers:
    0
    Trophy Points:
    60
    #3
    or:
    
    function isPalindrome(strX) {
    	strX = strX.replace(/[^a-zA-Z0-9]+/g,"").toLowerCase();  //leave only alphanumeric chararacters, and convert to lower case.
    	return(strX == strX.split("").reverse().join(""));  
    }
    
    Code (markup):
     
    camjohnson95, Dec 9, 2009 IP