-3

制作Windows 窗体并需要验证用户名,该用户名的长度最少为 4 个字符,最多为 15 个字符。它还将允许连字符和下划线以及中间的点,但不能在用户名的开头和结尾。一行中最多可以有一个连字符、一个下划线和一个点。它不应包含空格 不允许使用的用户名示例:

-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._-]$/

我想这个模式很清楚:对于每个应该只遇到一次的符号,使用一个前瞻表示“匹配任意数量的不是选中的符号,然后是选中的符号(这是可选的),然后,同样,对于任意数量的未被选中的符号,然后是字符串的结尾'。

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

最后一部分是检查字符串不应该只包含数字:

(?!\d+$)

不过,我想知道为什么要使用单个正则表达式而不是一系列测试,这将更加灵活和可读。

于 2012-10-01T11:52:34.383 回答