我需要一个特定的Java和Javascript正则表达式模式

时间:2013-04-23 12:46:43

标签: java javascript regex

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

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

E.g。正确的结果: 目录root1 1root ro1ot Roo11t 等...

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

但这似乎也接受了特殊的人物......?

非常感谢!

2 个答案:

答案 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]*$