13 апр. 2017 г., 14:57 отCommunityDavChana

как изменить регистр строки в php? paSSw5ORD в PAssW5ord?

Как уже упоминалось в этом Мета Вопрос, Facebook принимает прямо противоположную версию нашего пароля. Например

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

Как получить второй вариант, если первый является исходным, введенным пользователем (или получить первый, когда пользователь входит во вторую версию)? Вот мой взгляд на это.

<?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;
?>

Но как заставить его обрабатывать пароли с помощью специальных символов (все это возможно на стандартной английской клавиатуре?

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

Это не работает со всеми вышеуказанными специальными символами.

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

Я не эксперт по RegEx, поэтому Как изменить вышеупомянутый RegEx, чтобы он обрабатывал все вышеупомянутые специальные символы?

Ответы на вопрос(5)

23 мая 2012 г., 09:45 отNick

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

Я нашел это в php.net инструкция давным-давно, когда я хотел сделать то же самое. Я просто превратил это в функцию.

23 мая 2012 г., 10:24 отJoakim Syk

для всех символов Юникода.

ö -> Ö Å -> å ü -> Ü

и так дале

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;
}
23 мая 2012 г., 09:50 отDhruvisha

Здесь есть функция переключения регистра символов в строк

<?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
?>

Надеюсь, что это поможет ва

Тот же пример приведен в этомссылк .

23 мая 2012 г., 09:40 отjugnu

ctype_upper,ctype_lower, чтобы найти строчные и прописные буквы в строке, то вы можете использоватьstrtolower and strtoupper чтобы изменить регистр букв.

26 февр. 2017 г., 03:10 отuser6371556

$char = $str[$i]; с$char = mb_substr($str, $i, 1); Только тогда он будет работать для всех символов Юникода, включая немецкий.

ВАШ ОТВЕТ НА ВОПРОС