【问题标题】:Regular expression for accepting alphanumeric characters (6-10 chars) .NET, C#用于接受字母数字字符(6-10 个字符)的正则表达式 .NET、C#
【发布时间】:2011-01-12 12:28:45
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 为什么,为什么,为什么,您要设置密码的最大允许长度?
  • 我将把 Damien 的评论更进一步:为什么你(或者更确切地说,给你要求的人)将密码限制为字母数字字符?一个好的密码包含非字母数字。他们是否积极希望人们使用错误的密码?试着教育那些给你这些要求的人。
  • 但我们的要求只是这样
  • 也许他们正在对多个系统进行 SSO,而大型机只允许十个字符作为密码。谁知道?谁在乎?已经回答了狗狗的问题:-)

标签: c# regex char numbers alphanumeric


【解决方案1】:

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

^[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]$")

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

【讨论】:

  • 你的意思是所有这些都在一个表达式中,如下validationexpression="^([a-zA-Z0-9]{6,10})$[a-zA-Z][0- 9]"
  • 没有。我的意思是这样的: if (!str.match(re1)) return false;如果(!str.match(re2))返回false;返回 str.match(re3); - 这是三个独立的调用,三个独立的正则表达式。
【解决方案2】:

使用积极的lookahead

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

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

环顾的语法:

  • (?=REGEX) 积极前瞻
  • (?!REGEX) 负前瞻
  • (?&lt;=REGEX) 积极的向后看
  • (?&lt;!REGEX) 负向回溯

【讨论】:

  • 感谢您的回复。但它不起作用。尝试更改插入值的顺序。它不会正常工作
  • 哇,我没有想到这个。 Imo,它按预期工作,至少在 Python 中)
  • 尝试一些以数字开头的文本。如果您在单词的开头使用字母,它会按预期工作。但是当你以数字开头时,它不会。(我正在使用.net和c#)谢谢你的耐心。
  • @Madhu 我用 expresso 对其进行了测试,它适用于以数字开头的字符串。 (我没有.net 开发环境)。发布一个失败的例子,我们可能会告诉你问题出在哪里。
【解决方案3】:
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

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多