1
^[a-zA-Z0-9]*[a-zA-Z0-9 _][a-zA-Z0-9]{2,24}$

それが私が今持っているものです。

最初に英数字を要求したい。英数字、アンダースコア、ハイフン、ピリオド、スペースを使用できます。英数字で終わる必要があります。しかし、これらの特殊文字は 3 つまでしか許可したくありません。

特殊文字の数を制限する方法について主に混乱しています。

4

3 に答える 3

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 文字が開始終了英数字に既に使用されているためです。

于 2013-02-01T15:28:10.857 に答える
1

さて、これが最後の編集になるはずです。合計文字数の制限については考えていませんでした。先読みを追加しました(正規表現のフレーバーがそれをサポートしていると仮定します)。

これよりも良い方法があるかもしれませんが、それは私には来ていません(多分先読みを使用しています)。これが私が考えることができるものです:

^(?=^.{2,24}$)[a-zA-Z0-9]+([a-zA-Z0-9]*[_\-. ]){0,3}[a-zA-Z0-9]+$

あまりきれいではありませんが、うまくいくはずです。

于 2013-02-01T15:07:08.717 に答える
0
^[a-zA-Z0-9]+[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]*[ _.-]?[a-zA-Z0-9]+$

おそらくこれを行うためのより良い方法がありますが、無効な文字をオプションにして、最大3回表示し、その間に他の有効な文字を0回以上表示することができると思います

于 2013-02-01T15:36:49.470 に答える