5-30长度文本中至少一个字符和一个数字的正则表达式

时间:2013-10-23 20:18:04

标签: regex

要求:

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

允许:“!,@,#,$,%,^,?,_,〜, - ”

我已经尝试了类似这样的长度和普通字符要求。

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

这并不能保证我同时收到字母和数字 - 只是允许我们

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

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

2 个答案:

答案 0 :(得分:4)

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

^(?=.*?[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

答案 1 :(得分:1)

以下是一些提示:

[:alpha:]是一个&#34;特殊角色&#34;那是&#34;任何大写或小写字母&#34;

[:digit:]是&#34;任何数字&#34;

[!@#$%^?_~-]表示&#34;匹配任何这些字符&#34;

[^ ]表示&#34;不匹配空格&#34;

{5,30}表示&#34;匹配前面的表达式5到30次

正则表达式允许两个表达式之间的|之类的内容匹配&#34;这个或那个&#34;。

http://rubular.com/是一个伟大的正则表达式沙箱&#34; - 您可以输入表达式,并查看匹配的内容

当你玩了上面一段时间并且得到它并且几乎正在工作&#34;时,会有人在这里帮助你[#34;越过终点线&#34;。