【问题标题】:Regex to have atleast 1 character and 1 number正则表达式至少有 1 个字符和 1 个数字
【发布时间】:2014-08-27 06:25:04
【问题描述】:

我正在尝试制作一个正则表达式,使其最小长度为 8,最大长度为 25,它应至少包含 1 个 [A-Za-z] 和至少 1 个 [0-9]

这是我想出的:

Regex regex = new Regex("^.+${8,25}(?<=[A-Za-z])(?<=[0-9])");

var test = regex.IsMatch("testadasd9");

但它不起作用。正如你所看到的,我在后面使用积极的目光。任何帮助表示赞赏。

【问题讨论】:

  • 需要正则表达式吗?或许使用标准的c#字符串函数,会更简单、更清晰。
  • 抱歉,正则表达式是必需的,因为我希望在 Asp.Net 正则表达式验证器中使用它
  • Jack 这有点奇怪,需要正则表达式...“不工作”是什么意思?
  • @Jack - 不工作可能意味着很多事情:代码无法编译,你的程序崩溃,你没有得到想要的结果,你得到了一些想要的结果,但也有错误的结果,你的程序运行,但您的代码永远无法到达,您的程序在某些计算机上运行,​​但在其他计算机上运行......它似乎产生了一些错误的结果,但您从未描述过它们。
  • pwas 和 Avinash Raj 是如何理解我的 2 行代码让你如此困惑的?

标签: c# .net regex


【解决方案1】:

您可以尝试以下正则表达式来匹配最小长度为 8 和最大长度为 25 的字符串,并且该字符串必须包含至少一个文字 [A-Za-z] 和至少一个数字。

^(?=.{8,25}$)(?=.*?[A-Za-z])(?=.*?[0-9]).*

DEMO

【讨论】:

  • 不能改成 new Regex("(?=.{8,25}$)(?=.*?[A-Za-z])(?=.* ?[0-9])");为了清楚起见?
  • 我不明白这些积极的前瞻是如何工作的。前瞻的内容是有道理的,但是当第一个前瞻已经包含整个字符串时,它如何使用 .* 选择整个字符串?有趣的是,您可以在环视部分使用结束标记 $,但我很困惑。
  • 哇哦,现在我明白了。那些与“无”匹配的前瞻,后跟这些前瞻的所需内容,因此当所有这些前瞻都为真时选择“无”,但您可以在最后使用.* 选择所有。是否任何前瞻都不正确,.* 永远不会到达,因此您可以在使用开始标记^ 时确定整个字符串的条件,多么酷。
  • @modiX 前瞻用于条件检查,前瞻也应该进行零宽度匹配。查看第一个前瞻^(?=.{8,25}$),它匹配开始(零宽度),然后检查前瞻中给出的条件,即必须至少有 8 个字符和最多 25 个字符,因为它紧跟在行结束锚点 @ 987654329@ 然后它移动到下一个前瞻... 字符串只有在所有前瞻都为真时才会匹配。
  • @AvinashRaj 是的,基本上我知道内容的作用。我只是再次将前瞻与后视混合在一起。所以这是有道理的。不过,谢谢你的澄清。
猜你喜欢
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多