As mentioned in this Meta Question, Facebook accepts the exact opposite case variation of our password. For example:
1.- paSSw5ORD (Original password)
2.- PAssW5ord (Case altered to exact opposite, Capital->Small and vice-versa.)
3.- PaSSw5ORD (Only first letter's case altered)
How to get the second variation, provided the first one is the original one, entered by user (or to get first one when user enters second version)? Here is my take on this.
<?php
$pass = "paSSw5ORD"; //Example password
$pass_len = strlen($pass); //Find the length of string
for($i=0;$i<$pass_len;$i++){
if(!(is_numeric($pass[$i]))){ //If Not Number
if($pass[$i]===(strtoupper($pass[$i]))){ //If Uppercase
$pass2 .= strtolower($pass[$i]); //Make Lowercase & Append
} else{ // If Lowercase
$pass2 .= strtoupper($pass[$i]); //Make Uppercase & Append
}
} else{ //If Number
$pass2 .= $pass[$i]; //Simply Append
}
}
//Test both
echo $pass."\r\n";
echo $pass2;
?>
But how to make it process passwords with special characters (all possible on a standard English keyboard?
!@#$%^&*()_+|?><":}{~[];',./ (Space also)
This does not work on all above special characters.
if(preg_match('/^\[a-zA-Z]+$/', "passWORD")){
//Special Character encountered. Just append it and
//move to next cycle of loop, similar to when we
//encountered a number in above code.
}
I am no expert of RegEx, so How to modify the above RegEx to make sure it processes all the above mentioned special characters?