^[a-zA-Z0-9]*[a-zA-Z0-9 _][a-zA-Z0-9]{2,24}$
それが私が今持っているものです。
最初に英数字を要求したい。英数字、アンダースコア、ハイフン、ピリオド、スペースを使用できます。英数字で終わる必要があります。しかし、これらの特殊文字は 3 つまでしか許可したくありません。
特殊文字の数を制限する方法について主に混乱しています。
次の正規表現も使用できます。
/^(?!(?:[a-z\d]*[_. -]){4})[a-z\d][\w. -]{0,22}[a-z\d]$/i
先読み(?!(?:[a-z\d]*[_. -]){4})
は、無効な文字の出現が 4 つ未満であることを確認することです。4 つ以上ある場合、否定的な先読み内のパターンが一致し、先読みが失敗します。
文字列は英数字で開始および終了する必要があり、長さは少なくとも 2 であるため[a-z\d]
、文字列の開始および終了として指定することができます。間にある残りの文字には、0 ~ 22 回の繰り返しを含めることができます。これは[a-zA-Z0-9_. -]
、2 文字が開始終了英数字に既に使用されているためです。
さて、これが最後の編集になるはずです。合計文字数の制限については考えていませんでした。先読みを追加しました(正規表現のフレーバーがそれをサポートしていると仮定します)。
これよりも良い方法があるかもしれませんが、それは私には来ていません(多分先読みを使用しています)。これが私が考えることができるものです:
^(?=^.{2,24}$)[a-zA-Z0-9]+([a-zA-Z0-9]*[_\-. ]){0,3}[a-zA-Z0-9]+$
あまりきれいではありませんが、うまくいくはずです。
^[a-zA-Z0-9]+[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]+$
おそらくこれを行うためのより良い方法がありますが、無効な文字をオプションにして、最大3回表示し、その間に他の有効な文字を0回以上表示することができると思います