Wow, that is a lot of else if's... First of all, it is almost always better to compare the user input with what you want it to look like, not with what you don't want it to look like. Take this pseudo code for example:
if format is MM-YY
alert "invalid format"
if format is DD-MM-YY
alert "wrong format"
if format is YYYY/MM/DD
alert "completely wrong format"
If you go through all the invalid inputs you will be stuck in front of the computer forever.. Instead compare the input with what you want it to look like.
if format is not MM/YYYY
alert "wrong format"
Then you only need to validate it once. Of course, this does not work if you want a custom error message for every false user input, but you don't want that. 
//CODE GOES HERE
else if (validDate(cardexp) == true)
{
return validDate(cardexp);
return false;
}
else if (compareDate(cardexp)==true)
{
return compareDate(cardexp);
}
What are you trying to accomplish here? All you need to do to validate the format and make sure the given date is next month or later is:
if (compareDate(cardexp) == true){
// All the code you want to run if user input is valid goes here.
}else{
// Code within these brackets will be run if user input is invalid.
}
The code I posted will only work with the MM/YYYY format. 007Juliens code is a little harder to understand but works for all kinds of similar formats like MM:YYYY, MM-YYYY, MM/YYYY. Use his code instead if you know how to work with it.