正则表达式检查三个标准中的两个

时间:2010-09-20 20:32:07

标签: .net regex

我需要创建一个正则表达式来匹配满足以下三个条件中任意两个的字符串:至少一个大写字母,至少一个小写字母,至少一个数字。

例如,结果如下:

"TestString" = MATCH (upper & lower)
"TestSTring5" = MATCH (upper, lower, & number)
"teststring" = NO MATCH (lower)
"TESTSTRING" = NO MATCH (upper)
"teststring5" = MATCH (lower & number)
"345T" = MATCH (number & upper)

3 个答案:

答案 0 :(得分:0)

如果为每个条件创建单独的正则表达式,它将更直接,更容易维护。

伪代码:

reHasUpper = /[A-Z]/ ;
reHasLower = /[a-z]/ ;
reHasNumber = /[0-9]/ ;

function validatePassword (pwd) {

  metRequirements=0;

  if (reHasUpper.test(pwd)) metRequirements++;
  if (reHasLower.test(pwd)) metRequirements++;
  if (reHasNumber.test(pwd)) metRequirements++;

  return metRequirements > 1;

}

答案 1 :(得分:0)

这将是一个巨大的正则表达式。

你需要测试这样的东西(仅为了可读性而缩进):

"[a-z].*[A-Z]|" +
"[A-Z].*[a-z]|" +
"[A-Z].*[0-9]|" +
"[0-9].*[A-Z]|" +
"[a-z].*[0-9]|" +
"[0-9].*[a-z]"

答案 2 :(得分:0)

我会尝试以下方式:

([a-z][A-Z]|[A-Z][a-z]|[a-z][0-9]|[0-9][a-z]|[A-Z][0-9]|[0-9][A-z])

这基本上做的是检查以下行中的任何对:

  • A1
  • 1A
  • A1
  • 1A
  • AA
  • 了Aa

在你的字符串中。如果这些对中没有一个匹配,则失败。由于您正在寻找要满足的三个条件中的任何两个,因此通过查找符合条件的字符对来工作。