用于接受字母数字字符的正则表达式(6-10个字符).NET,C#

时间:2010-02-03 07:38:59

标签: c# regex char numbers alphanumeric

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

  1. 它应该是字母数字(a-z,A-Z,0-9)
  2. 它应该接受6-10个字符(最少6个字符,最多10个字符)
  3. 至少包含1个字母和数字(例如:stack1over
  4. 我正在使用如下的正则表达式。

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

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

3 个答案:

答案 0 :(得分:9)

如果可以的话,将它传递给多个正则表达式。它比那些超前的怪物要清洁得多: - )

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

虽然有些人可能认为它很聪明,但没有必要用一个正则表达式来做所有(或者甚至用任何正则表达式,有时候 - 只是见证那些希望正则表达式检测75和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]$")

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

答案 1 :(得分:7)

使用正面lookahead

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

环顾四周也被称为零宽度断言。它们的零宽度就像行的开头和结尾一样(^$)。区别在于,lookarounds实际上匹配字符,但随后放弃匹配并仅返回结果:匹配或不匹配。这就是他们被称为“断言”的原因。它们不消耗字符串中的字符,但仅断言是否可以匹配。

环顾四周的语法:

  • (?=REGEX)积极向前看
  • (?!REGEX)否定前瞻
  • (?<=REGEX)积极向后看
  • (?<!REGEX)负面的背后隐藏

答案 2 :(得分: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