我需要一个具有以下条件的正则表达式:
E.g。正确的结果: 目录root1 1root ro1ot Roo11t 等...
目前我的格式为^(?=.*\d{1,})(?=.*[a-zA-Z]{4,}).{5,}$
但这似乎也接受了特殊的人物......?
非常感谢!
答案 0 :(得分:6)
.{5,}
这就是为什么它允许使用特殊字符(dot =所有内容(除了换行符等)。将其更改为[a-z0-9]{5,}
或您想要的任何内容。
注意:(?=.*\d{1,})(?=.*[a-zA-Z]{4,})
仅检查第2和第3个要求,但不要说明字符的通缉性质。
修改强>
其他问题:你的规范说“至少4个字母”,但你的正则表达式是“连续4个字母”。另外,使用lazy量词。
/^(?=.*?\d)(?=(?:.*?[a-z]){4})[a-z0-9]{5,}$/i
(?=.*?\d)
=>你不需要检查超过1个号码,一旦你找到它,停止。
(?=(?:.*?[a-z]){4})
=>改为找4个字母,但不是连续的。另外,在末尾添加了一个不敏感的case修饰符i
(在JS中,在Java中你没有以同样的方式声明它)。
答案 1 :(得分: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]*$