需要正则表达式(C#)

时间:2012-01-09 08:53:20

标签: asp.net regex c#-4.0

更新::

密码强度:

包含以下四个类别中的三个字符:

  • 英文大写字母(A到Z)
  • 英文小写字母(a到z)
  • 基数10位(0到9)
  • 非字母字符(例如,!,$,#,%

是否可以将两个字段值(输入)与正则表达式进行比较...如果是,那么请将另一个条件添加到上面的列表中。

  • 将密码与输入的用户名进行比较,它们必须不同

2 个答案:

答案 0 :(得分:3)

编辑:这个答案是在编辑问题之前编写的。它最初包括不包括用户帐户名称的要求,且长度至少为8个字符。

鉴于您无论如何都需要使用用户的帐户名称,您是否有任何理由想要将其作为正则表达式?您可能希望使用正则表达式来表达四个类别的模式(尽管还有其他方法)但我会单独编写规则。例如:

// Categories is a list of regexes in this case. You could easily change
// it to anything else.
int categories = Categories.Count(regex => regex.IsMatch(password));
bool valid = password.IndexOf(name, StringComparison.OrdinalIgnoreCase) == -1
          && password.Length >= 8
          && categories >= 3;

答案 1 :(得分:1)

如果你需要在一个表达式中执行它,它应该是这样的:

^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])).{8,}$

here on Regexr

正向前瞻((?=.*[a-z]))用于检查字符串是否包含您想要的字符组。

这里的问题是,你想要4个中的3个,这意味着你必须对所有允许的组合进行交替。

最后一部分.{8,}然后匹配字符串并检查至少8个字符。

^$是锚点,用于将模式锚定到字符串的开头和结尾。

[!%,.;:]是一个字符类,在这里您可以添加要包含的所有字符。对于所有标点符号,使用像\p{P}这样的Unicode脚本可能更简单。有关详细信息,请参阅regular-expresssions.info

<强>更新

  

将密码与输入的用户名进行比较,它们必须不同

通常你应该能够使用字符串连接来构建正则表达式。我不知道你把正则表达式放在你的情况下是怎么回事......

像这样(伪)

String Username = "FooBar";
regex = "^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:]))(?i)(?!.*" + Username + ").+$";

我在这里也使用内联修饰符(?i)来匹配它独立的情况。 (?!.*是否定前瞻的开始,意味着字符串不应包含...