-4

要求:

• 用户名的长度应在 5 到 30 个字符之间
• 它们必须包含字母和数字。
• 用户名不区分大小写。
• 不得使用空格。

允许:"!,@,#,$,%,^,?,_,~,-"

对于长度和正常字符的要求,我已经尝试过类似的方法。

^[a-z0-9_-]{5,30}$  

这并不能保证我得到字母和数字 - 只是允许它们

[A-Za-z].*[0-9]|[0-9].*[A-Za-z]  

我不知道如何将其限制为总共 5-30 个字符?

4

2 回答 2

5

你可以试试这个正则表达式:

^(?=.*?[a-zA-Z])(?=.*?[0-9])[\w@#$%^?~-]{5,30}$

现场演示和示例:http ://www.rubular.com/r/EXHHCoq0WC

解释:

  • ^是行开始
  • (?=.*?[a-zA-Z])是一个积极的前瞻,将确保至少有一个字母表
  • (?=.*?[0-9])是一个积极的前瞻,将确保至少有一个数字
  • [\w@#$%^?~-]{5,30}正在使用方括号内指定的 5 到 30 个字符的字符类
  • $是行尾

环视参考:www.regular-expressions.info/lookaround.html

于 2013-10-23T20:53:10.537 回答
1

这里有一些提示:

[:alpha:]是一个“特殊字符”,即“任何大写或小写字母”

[:digit:]是“任何数字”

[!@#$%^?_~-]意思是“匹配这些字符中的任何一个”

[^ ] 意思是“不匹配空格”

{5,30} 表示“匹配前面的表达式 5 到 30 次

正则表达式允许|在两个表达式之间匹配“这个或那个”。

http://rubular.com/ 是一个很棒的“正则表达式沙盒”——您可以输入表达式,然后查看匹配的内容

当您在上面玩了一段时间并且“几乎可以工作”时,就会有人在这里帮助您“越过终点线”。

于 2013-10-23T20:33:59.617 回答