How to change string case in php? paSSw5ORD for PAssW5ord?

As mentioned in this Meta Question , Facebook accepts the exact opposite of our password. For instance:

1.- paSSw5ORD (Original password) 2.- PAssW5ord (Case altered to exact opposite, Capital->Small and vice-versa.) 3.- PaSSw5ORD (Only first letter case altered) 

How to get the second option, if the first one is original, entered by the user (or the first when the user enters the second version)? Here is my example.

 <?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 handle passwords with special characters (is everything possible on a standard English keyboard?

 !@ #$%^&*()_+|?><":}{~[];',./ (Space also) 

This does not work with all 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'm not a RegEx expert, so how do I modify the above RegEx to make sure that it handles all the above special characters?

+6
source share
5 answers

Here is a function to toggle the 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 helps you

The same example is given in this link .

+3
source

To invert the string case, I use this function:

 function invert_case($string) { return preg_replace('/[az]/ie', '\'$0\' ^ str_pad(\'\', strlen(\'$0\'), \' \')', $string); } 

I found it in the php.net directory a long time ago while I was looking to do the same. I just turned it into a function.

+6
source

you need to examine ctype_upper,ctype_lower to find upper and lower case letters in a string, then you can use strtolower and strtoupper to change the case of letters.

+2
source

Previous answers to this question only work for az. This works for all unicode characters.

  • ΓΆ β†’ Γ–
  • Γ… β†’ Γ₯
  • ΓΌ β†’ Ü
  • etc.

     function invert_case($str) { $inverted = ''; for($i=0;$i<mb_strlen($str);$i++) { $char = $str[$i]; $upper = mb_strtoupper($char); if($upper == $char) { $inverted .= mb_strtolower($char); } else { $inverted .= $upper; } } return $inverted; } 
+2
source

The answer to Joakim is on the right track, but one line is incorrect: Replace $char = $str[$i]; on $char = mb_substr($str, $i, 1); Only then will it work for all Unicode characters, including German.

0
source

Source: https://habr.com/ru/post/916439/


All Articles