how to alter the case of a string in php? paSSw5ORD to PAssW5ord?
case, facebook, php, string
Solution
Here is a function to toggle case of characters in a string .
<?php
$string = "Hello"; // the string which need to be toggled case
$string_length = strlen($string); // calculate the string length
for($i=0;$i<$string_length;$i++){ // iterate to find ascii for each character
$current_ascii = ord($string{$i}); // convert to ascii code
if($current_ascii>64 && $current_ascii<91){ // check for upper case character
$toggled_string .= chr($current_ascii+32); // replace with lower case character
}elseif($current_ascii>96 && $current_ascii<123){ // check for lower case character
$toggled_string .= chr($current_ascii-32); // replace with upper case character
}else{
$toggled_string .= $string{$i}; // concatenate the non alphabetic string.
}
}
echo "The toggled case letter for $string is <hr />".$toggled_string; // output will be hELLO
?>
Hope this will help you
Same example is given in this link .
Problem
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?