必要なのはUnicodeです!
Unicode コード プロパティ
Pattern p = Pattern.compile("^(?=.*\p{Nd})(?=.*\p{L})[\p{L}\p{Nd}]{2,10}$");
\p{L}
および\p{Nd}
は Unicode プロパティです。
\p{L}
任意の言語の任意の種類の文字です
\p{Nd}
表意文字スクリプトを除くすべてのスクリプトの 0 から 9 までの数字
Unicode プロパティの詳細については、regular-expressions.infoを参照してください。
Pattern.UNICODE_CHARACTER_CLASS
Pattern.UNICODE_CHARACTER_CLASS
事前定義された文字クラスの Unicode バージョンを有効にする新しいプロパティもあります。詳細とリンクについては、こちらの回答を参照してください。
あなたはこのようなことをすることができます
Pattern p = Pattern.compile("^(?=.*\\d)(?=.*[A-Za-z])\\w{2,10}$", Pattern.UNICODE_CHARACTER_CLASS);
任意の言語のすべての文字と\w
すべての数字に一致します (もちろん、 のような文字を組み合わせた単語もあります_
)。
正規表現のエラー
また、正規表現を少し変更しました。元の先読み ( (?=.\d)(?=.[A-Za-z])
) は、文字と数字である 2 番目の文字をチェックします。すべての点で何が失敗しているのか、量指定子を使用した私のバージョンでは、それらが文字列のどこかにあるかどうかをチェックします。