我需要一个具有以下条件的正则表达式:
- 最少 5 个字符,没有最多字符(只有字母和数字)
- 必须包含至少 4 个字母
- 必须包含至少 1 个数字
例如正确结果:root1 1root ro1ot Roo11t 等...
目前我有模式^(?=.*\d{1,})(?=.*[a-zA-Z]{4,}).{5,}$
但这似乎也接受特殊字符......?
非常感谢!
我需要一个具有以下条件的正则表达式:
例如正确结果:root1 1root ro1ot Roo11t 等...
目前我有模式^(?=.*\d{1,})(?=.*[a-zA-Z]{4,}).{5,}$
但这似乎也接受特殊字符......?
非常感谢!
.{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 中您不会以相同的方式声明它)。
我知道这很丑陋,但这似乎有效:
^[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]*$