как изменить регистр строки в 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)

Ваш ответ на вопрос