このメタ質問で述べたように、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)
最初のバリエーションがユーザーによって入力された元のバリエーションである場合、2番目のバリエーションを取得する方法(またはユーザーが2番目のバージョンを入力したときに最初のバリエーションを取得する方法)?これが私の見解です。
<?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.
}
私は正規表現の専門家ではないので、上記のすべての特殊文字を確実に処理するように上記の正規表現を変更するにはどうすればよいですか?