好的,我终于明白了,我需要以下几点:
因此正则表达式必须执行:
即字母数字字符串,必须至少有一个字母,长度在4-8之间。(所以不可能只是所有的数字或所有的字母)。
所有这些都能在一个单一的正则表达式中完成吗?
发布于 2009-12-21 15:32:23
我假设你是指字母数字,至少有一个字母,4到8个字符长。
试试这个:
(?=.*[a-zA-Z])[a-zA-Z0-9]{4,8}(?= -我们使用的是前瞻,所以我们可以在不影响比赛其余部分的情况下进行检查.*[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个字符可能不够长。
发布于 2009-12-21 15:28:16
第二条和第三条似乎相互矛盾。以下将匹配4到8之间的字母数字:
/[0-9a-zA-Z]{4,8}/发布于 2009-12-21 15:35:31
?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}")
truehttps://stackoverflow.com/questions/1940729
复制相似问题