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?
To invert the case of a string I use this function:
function invert_case($string) {
return preg_replace('/[a-z]/ie', '\'$0\' ^ str_pad(\'\', strlen(\'$0\'), \' \')', $string);
}
I found it in the php.net manual ages ago while I was looking to do the same thing. I just turned it into a function.
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 .
you need to explore ctype_upper,ctype_lower
to find upper and lowercase letters in a string then you can use strtolower and strtoupper
to change the case of letters.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With