Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to alter the case of a string in php? paSSw5ORD to PAssW5ord?

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?

like image 203
DavChana Avatar asked May 23 '12 10:05

DavChana


3 Answers

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.

like image 106
Nick Avatar answered Nov 14 '22 23:11

Nick


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 .

like image 37
Dhruvisha Avatar answered Nov 14 '22 22:11

Dhruvisha


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.

like image 21
jugnu Avatar answered Nov 14 '22 23:11

jugnu