RegEx最少4个数字,最少1个字符

时间:2014-05-12 13:51:22

标签: regex

我正在尝试测试输入中是否包含至少4个数字和1个字符。我有这个有效,但只有当字符符合0000a的顺序时,无论顺序如何,我都希望它匹配,因此00a00a0000aa00a00a都会匹配模式。

[0-9]{4,}[a-zA-Z]{1,}

我需要改变什么?我尝试了[a-zA-Z0-9]{5,},但之后aaaaa00012之类的内容匹配,这是不合适的。

2 个答案:

答案 0 :(得分:8)

使用先行断言:

(?=.*[a-zA-Z])(.*?\d){4,}

Regular expression visualization

Debuggex Demo

答案 1 :(得分:0)

如果正式规则是:

"Numbers >= 4 AND characters == 1"

你将找不到正则表达式,因为角色可能无处不在。在这种情况下,您需要某种下推自动机或带计数器的算法。

如果规则是 "Numbers == 4 AND characters == 1"以下内容(不易阅读)可能有效:

([a-zA-Z][0-9]{4,})|([0-9][a-zA-Z][0-9]{3,})|([0-9]{2,}[a-zA-Z][0-9]{2,})|([0-9]{3,}[a-zA-Z][0-9])|([0-9]{4,}[a-zA-Z])

如果ruls是 “(数字+字符)> = 4 AND字符> = 1”这可能有效:

([a-zA-Z]([a-zA-Z]|[0-9]){4,})|(([a-zA-Z]|[0-9])[a-zA-Z]([a-zA-Z]|[0-9]){3,})|(([a-zA-Z]|[0-9]){2,}[a-zA-Z]([a-zA-Z]|[0-9]){2,})|(([a-zA-Z]|[0-9]){3,}[a-zA-Z]([a-zA-Z]|[0-9]))|(([a-zA-Z]|[0-9]){4,}[a-zA-Z])

但由于机器人解决方案非常难看,我建议不要使用它们。实现一个小算法会更容易,更易读。