怎么写这个正则表达式?

时间:2009-03-21 19:48:14

标签: c# regex

一个20 - 24字符长的字母数字字符串,没有空格,没有至少有2位数的符号

AAAAAAAAAAAAAAAAAAAA - not valid
AAAAAA0AAAAAAAAA0AAA - valid
AAAAAA01AAAAAAAAA0AAA - valid
AAAAAA0AAAAAAAAA0AAA@ - not valid

6 个答案:

答案 0 :(得分:5)

我认为这只能通过前瞻性断言来实现:

^(?=[a-zA-Z\d]{20,24}$)[a-zA-Z]*\d[a-zA-Z]*\d[a-zA-Z\d]*$

前瞻断言((?=[a-zA-Z\d]{20,24}$))检查字符串是否具有预期形式(20-24个字母数字字符)。第二部分([a-zA-Z]*\d[a-zA-Z]*\d[a-zA-Z\d]*)检查它是否包含至少两位数。

答案 1 :(得分:2)

我认为这是最简单的模式:首先做一个正面的预测,检查至少有两位数字,然后匹配20-24个字母数字字符:

^(?=.*\d.*\d)[A-Za-z\d]{20,24}$

答案 2 :(得分:1)

我将是抽象的,因为这听起来像是家庭作业(如果是的话,请将其标记为这样)。

  • 您可以限制模式与{分钟,最大}
  • 匹配的次数
  • 您可以限制哪些字符与[ charlist ]
  • 匹配
  • 您可以对所谓的零宽度正向前瞻(也有负面形式)施加额外限制。语法各不相同,因此请查看适合您环境的文档。

如果您需要更多帮助,请更新您的问题(&标签)。

答案 3 :(得分:1)

Gumbo对要求有正确的表达。

它可以缩短,但是它比短版本更清晰,可能更快。

var rX = / ^(?= [a-zA-Z \ d] {20,24} $)([a-zA-Z] * \ d){2,} /

答案 4 :(得分:0)

JS中的

(对C#语法不够自信):

if (str.length >= 20 && str.length <= 24 && /([a-z]*[0-9]){2}[a-z0-9]*/i.test(str)) {
  // match found
}

答案 5 :(得分:-1)

与Gumbo基本相同的想法只是更短一些:

^(?=[\w\d]{20,24}$)[\w]*\d[\w]*\d[\w\d]*$