3

我需要一个具有以下条件的正则表达式:

  • 最少 5 个字符,没有最多字符(只有字母和数字)
  • 必须包含至少 4 个字母
  • 必须包含至少 1 个数字

例如正确结果:root1 1root ro1ot Roo11t 等...

目前我有模式^(?=.*\d{1,})(?=.*[a-zA-Z]{4,}).{5,}$

但这似乎也接受特殊字符......?

非常感谢!

4

2 回答 2

6

.{5,}这就是为什么它允许特殊字符(点 = 一切(实际上除了换行符等))。将其更改为[a-z0-9]{5,}或任何您想要的。

注意:(?=.*\d{1,})(?=.*[a-zA-Z]{4,})只检查第 2 和第 3 个要求,但不要说任何关于角色的通缉性质。

编辑:
其他问题:您的规范说“至少 4 个字母”,但您的正则表达式说“4 个连续字母”。另外,使用惰性量词。

/^(?=.*?\d)(?=(?:.*?[a-z]){4})[a-z0-9]{5,}$/i

(?=.*?\d)=>你不需要检查超过1个数字,一旦你找到它,停止。
(?=(?:.*?[a-z]){4})=> 改为查找 4 个字母,但不连续。此外,在末尾添加了一个不区分大小写的修饰符i(在 JS 中,在 Java 中您不会以相同的方式声明它)。

于 2013-04-23T12:51:46.273 回答
1

我知道这很丑陋,但这似乎有效:

^[a-zA-Z0-9]*(([a-zA-Z]{4,}\d)|([a-zA-Z]{3,}\d[a-zA-Z]+)|([a-zA-Z]{2,}\d[a-zA-Z]{2,})|([a-zA-Z]+\d[a-zA-Z]{3,})|(\d[a-zA-Z]{4,}))[a-zA-Z0-9]*$
于 2013-04-23T13:05:11.977 回答