5

我正在使用带有 .NET 的 C# 构建用户注册表单。我需要验证用户输入的密码字段。验证要求如下。

  1. 它应该是字母数字 (az , AZ , 0-9)
  2. 它应该接受 6-10 个字符(最少 6 个字符,最多 10 个字符)
  3. 至少包含 1 个字母和数字(例如stack1over:)

我正在使用如下正则表达式。

^([a-zA-Z0-9]{6,10})$

它满足我的前两个条件。当我只输入字符或数字时它会失败。

4

3 回答 3

9

如果可以的话,通过多个正则表达式传递它。它会比那些超前的怪物干净得多:-)

^[a-zA-Z0-9]{6,10}$
[a-zA-Z]
[0-9]

尽管有些人可能认为它很聪明,但没有必要使用单个正则表达式(有时甚至使用任何正则表达式 - 只需见证希望正则表达式检测 75 到 4093 之间的数字的人)来做所有事情。

您是否希望看到一些漂亮的干净代码,例如:

if not checkRegex(str,"^[0-9]+$")
    return false
val = string_to_int(str);
return (val >= 75) and (val <= 4093)

或类似的东西:

return checkRegex(str,"^7[5-9]$|^[89][0-9]$|^[1-9][0-9][0-9]$|^[1-3][0-9][0-9][0-9]$|^40[0-8][0-9]$|^409[0-3]$")

我知道更愿意维护哪一个 :-)

于 2010-02-03T08:22:11.837 回答
7

使用积极的前瞻

^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,10}$

环顾四周也称为零宽度断言。它们是零宽度,就像行的开始和结束 ( ^, $)。不同的是,lookarounds 实际上会匹配字符,但随后放弃匹配并只返回结果:匹配或不匹配。这就是为什么它们被称为“断言”。它们不消耗字符串中的字符,而只是断言匹配是否可能。

环顾四周的语法:

  • (?=REGEX)积极前瞻
  • (?!REGEX)负前瞻
  • (?<=REGEX)积极的回顾
  • (?<!REGEX)负面回顾
于 2010-02-03T07:42:31.133 回答
0
string r = @"^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{6,10}$";
Regex x = new Regex(r);
var z = x.IsMatch(password);

http://www.regular-expressions.info/refadv.html

http://www.regular-expressions.info/lookaround.html

于 2013-12-05T14:35:29.303 回答