-3

Windows フォームを作成し、最小 4 文字、最大 15 文字の長さのユーザー名を検証する必要があります。ハイフンとアンダースコア、および中間のドットも許可されますが、ユーザー名の最初と最後には許可されません。1 つのハイフン、1 つのアンダースコア、および 1 つのドットを続けて使用することはできません。空白 は使用できません 許可されていないユーザー名の例:

-aquib
_aquib
.aquibxyz
aquib.
99546521896   // should not allow only number. username should be alphanumeric or alphabetic
aquibxyz--qureshi
aquib__xyzqureshi
aquibqureshi-
aquib..qureshi
aquib_     // means no symbols will be there at end
4

1 に答える 1

3

そのための単一の正規表現を作成できます。簡単な要件から始めます。

/^[^\s._-]\S{2,13}[^\s._-]$/

つまり、「文字列は、空白記号、ドット、ハイフン、またはアンダースコアではない任意の文字から始まり、その後に 2 つ以上 13 個以下の非空白文字が続き、その後に非空白文字ではない任意の文字が続く必要があります。空白記号、ドット、ハイフン、またはアンダースコア」。

これを追加の要件で装飾するには、先読みを使用します。

/^(?=[^-]*-?[^-]*$)(?=[^.][.]?[^.]*$)(?=[^_]*_?[^_]*$)[^\s._-]\S{2,13}[^\s._-]$/

パターンは非常に明確であると思います: 1 回だけ遭遇する必要があるシンボルごとに、「チェックされたものではない任意の数のシンボルに一致し、次にチェックされたもの (オプション) に一致する」という先読みを使用します。繰り返しますが、チェックされたシンボル以外の任意の数のシンボルについては、文字列の最後です。

(?=[^s]*s?[^s]*$)

最後の部分は、文字列が数字だけで構成されていないことを確認しています。

(?!\d+$)

ただし、一連のテストではなく、単一の正規表現で実行したいのはなぜでしょうか。これにより、より柔軟で読みやすくなります。

于 2012-10-01T11:52:34.383 に答える