【发布时间】:2010-12-28 18:48:46
【问题描述】:
好的,所以我终于发现我需要以下内容:
所以正则表达式必须执行:
- 字母数字
- 至少 1 个字母
- 必须包含 4 到 8 个字符(字母/数字)。
即一个字母数字字符串,必须至少有 1 个字母,长度在 4-8 之间。 (所以不能全是数字或全是字母)。
所有这些都可以在一个正则表达式中完成吗?
【问题讨论】:
-
字符是指字母,而 4-8 是指任何字母。
好的,所以我终于发现我需要以下内容:
所以正则表达式必须执行:
即一个字母数字字符串,必须至少有 1 个字母,长度在 4-8 之间。 (所以不能全是数字或全是字母)。
所有这些都可以在一个正则表达式中完成吗?
【问题讨论】:
我假设您的意思是字母数字,至少一个字母,长度为 4 到 8 个字符。
试试这个:
(?=.*[a-zA-Z])[a-zA-Z0-9]{4,8}
(?= - 我们使用的是lookahead,因此我们可以在不影响其余比赛的情况下检查某些内容
.*[a-zA-Z] - 匹配后跟字母的任何内容,即检查我们至少有一个字母
[a-zA-Z0-9]{4,8} - 这将匹配一个字母或数字 4 到 8 次。
但是,您说的意图是“不能全是数字或全是字母”,但要求 1、2 和 3 并不能做到这一点,因为它可以全是字母并满足所有三个要求。您可能想要这个,并通过额外的前瞻来确认至少有一个数字:
(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{4,8}
a-zA-Z 的使用在国际上不是很友好,因此如果在您的正则表达式中可用,您最好使用“字母”的转义码。
另外,我希望这与可接受的密码不匹配,因为 4 个字符可能不够长。
【讨论】:
数字 2 和 3 似乎矛盾。以下将匹配 4 到 8 之间的字母数字:
/[0-9a-zA-Z]{4,8}/
【讨论】:
?Regex.IsMatch("sdf", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
false
?Regex.IsMatch("sdfd", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
true
?Regex.IsMatch("1234", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
false
关于 **.* 和 .+ 的警告:
// At least one letter does not match with .*
?Regex.IsMatch("1111", "(?=.*[a-zA-Z])[a-zA-Z0-9]{4,8}")
false
?Regex.IsMatch("1aaa", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
true
【讨论】:
[a-zA-Z0-9]{4,8}
第一部分指定字母数字,第二部分指定 4 到 8 个字符。
【讨论】:
试试:[a-zA-Z0-9]{4,8}
【讨论】: