cómo alterar el caso de una cadena en php? paSSw5ORD a PAssW5ord?

Como se menciona en esta pregunta de meta , Facebook acepta la variación de caso exactamente opuesta de nuestra contraseña. Por ejemplo:

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

¿Cómo obtener la segunda variación, siempre que la primera sea la original, ingresada por el usuario (o para obtener la primera cuando el usuario ingresa a la segunda versión)? Aquí está mi opinión sobre esto.

 <?php $pass = "paSSw5ORD"; //Example password $pass_len = strlen($pass); //Find the length of string for($i=0;$i 

Pero, ¿cómo hacer que procese contraseñas con caracteres especiales (todo esto es posible con un teclado inglés estándar?

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

Esto no funciona en todos los caracteres especiales anteriores.

 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. } 

No soy un experto en RegEx, entonces ¿cómo modificar el RegEx anterior para asegurarme de que procesa todos los caracteres especiales mencionados anteriormente?

Aquí hay una función para alternar mayúsculas y minúsculas de caracteres en una cadena.

 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 
".$toggled_string; // output will be hELLO ?>

Espero que esto te ayudará

El mismo ejemplo se da en este enlace .

Para invertir la caja de una cadena, uso esta función:

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

Lo encontré en el manual de php.net hace años mientras buscaba hacer lo mismo. Simplemente lo convertí en una función.

necesita explorar ctype_upper,ctype_lower para encontrar letras mayúsculas y minúsculas en una cadena, luego puede usar strtolower and strtoupper para cambiar la mayúscula de las letras.

Las respuestas anteriores a esta pregunta solo funcionan para az. Esto funciona para todos los caracteres Unicode.

  • ö -> Ö
  • Å -> å
  • ü -> Ü
  • y así

     function invert_case($str) { $inverted = ''; for($i=0;$i 

La respuesta de Joakim está en el camino correcto, pero una línea es incorrecta: Reemplazar $char = $str[$i]; con $char = mb_substr($str, $i, 1); Solo entonces funcionará para todos los caracteres Unicode incluido el alemán.