5

一般的な要件は、3 つの連続する文字または数字を受け入れないパスワードの方法を実装する必要があることです。したがって、「abc123」パスワードはありません。

3文字が連続しているかどうかを確認する方法が必要です-明らかに、単一の言語ではこれはかなり簡単ですが、すべてのユニコード言語の汎用コードは私を逃れるようです.

最初に、3 つの文字が同じ言語であるかどうかを判断する方法が必要であり、次にそれらが連続しているかどうかを判断する必要があると思います。ユニコードには、特定の方法で順序付けされていない言語もあります。そのため、順序付けられた言語であるかどうかを判断する方法が必要になります。

これは私が想像しているほど複雑ですか、それともユニコード内にこのようなことを可能にするJavaライブラリ/固有のパターンがありますか?

要件を減らして、Unicode 番号を互いに数値的に比較する場合、問題が発生する現実のシナリオはありますか? つまり、ある言語の末尾の 2 文字と次の言語の最初の文字を有効な方法で含むパスワードを誰かが選択する可能性はありますか?

4

4 に答える 4

0

これは意味のある要件ではありません。

まず、すべてのコード ポイントの絶対シーケンスを定義できたとしても、Unicode は移動中のターゲットです。リリースごとに、割り当てられていないギャップに新しいコード ポイントが追加されます。

Unicode Collat​​ion Algorithm Introductionから:

照合順序は言語と文化によって異なります。ドイツ語、フランス語、スウェーデン人は同じ文字を異なる方法で並べ替えます。

Unicode は既定の並べ替え順序を定義しますが、ユーザーの期待に反する場合があります。英語を話す人はstu、連続したシーケンスと見なします。しかし、 U+00DF シャープ s を考えてみてßください。これを文字列に含めて、英語ロケールの Java 照合ルールを使用して並べ替えると、sßtu.

序文は次のように続けます。

特定の言語で使用されていないスクリプトや文字については、明示的な規則が存在しない場合があります。たとえば、スウェーデン語とフランス語では、ä を並べ替えるための個別の規則が明確に指定されていますが (z の後、または a とは 2 次的な違いがあるアクセント付き文字として)、どちらも Ж、ש、♫、∞、◊ などの文字の順序を定義していません。 、または⌂。

i18nの問題があるため、単一の順序付けがすべてのユーザーにとって意味があるとは期待できません。最善の方法は、個々の言語についていくつかのヒューリスティックを作成することです。

于 2013-11-11T14:25:38.743 に答える