ユーザー名を分析するコードを書いているだけです。これまでのところ、ユーザー名に不適切な単語、句読点、記号、数字、または繰り返し文字が含まれているかどうかを検出するコードを作成しましたが、異常な大文字の検出に苦労しました。
これまでのところ、非常に簡単な方法を導入するか、次の形式でこれを実行しています。名前に大文字が 3 文字以上含まれている場合、その名前は拒否されます。(Anne-marie のように二重の名前を持っている人もいるため、2 つ使用しました)。
$capitals = strlen($name) - strlen(preg_replace('/[A-Z]/', '', $name));
if ($capitals > 2) {
$hasError = true;
}
ただし、通常とは異なる大文字化の問題に対する中途半端な解決策が得られます。問題は、中途半端!名前に大文字と小文字の多くの可能なパターンを許可しますが、それらが 2 文字を超える場合は許可されません。
そのため、if ステートメントに追加のコードを追加して、大文字の繰り返しをチェックし、上記のコードを次のようにしました。
$capitals = strlen($name) - strlen(preg_replace('/[A-Z]/', '', $name));
if (preg_match('/[A-Z]{2,}/', $name) || $capitals > 2) {
$hasError = true;
}
これで、この問題の 70% が解決したようです。ユーザーはこのようなパターンを使用できなくなりました。XXxxx、XxXxX、xxxXX、xxx-XXXxx。しかし、使用する文字が 2 文字未満であり、大文字をグループ化しない限り、対処しなければならない問題がまだあります。「クールな」見た目の名前を作成できます。そのため、ユーザーが JeSse のようなスタイルの名前を入力した場合、それは受け入れられます。
だから私の質問は、この問題の最後のステップについてどうすればよいですか? ユーザーが Jesse、Jesse-James、Jesse James の形式でファースト ネームを持つことだけを許可する必要があります。名前が二重のバレルであっても、名前の最初の文字だけが大文字になっていることを確認するにはどうすればよいですか?
Python では、.find() を使用して、最初の単語の最初の文字を検出し、それが大文字であることを確認し、スペースまたはハイフンに遭遇するまでカウントしてから、スペースまたはハイフンの後の次の文字を確認しますも大文字ですか?しかし、PHPで正規表現を使用してこれを行う方法がわかりません。
これは正規表現でそれを行う正しい方法でしょうか? もしそうなら、どうすればいいですか?または、PHP には、Python と同様の方法で使用できる秘密の .find() 関数がありますか? もしそうなら、そのルートをたどる方が適切でしょうか?
「正規表現の問題があります。パターンを検出する必要があります」などの質問をしている多くの numptys のようです。その後、彼らにとって役立つ回答が返ってくることを期待しています。十分な情報を提供したかったのです。将来このページにたどり着く人々に役立つように。
今後ともよろしくお願いいたします。
ジェイミー
PS興味深いことに、PHPで英語以外の文字を使用する方法を知っている人はいますか。検出したい文字の文字列を作成する必要がありますか、それとも php には html エンティティのような各文字の「コード」がありますか?