C#正则表达式,用于至少一个字母和至少一个数字

C#正则表达式,用于至少一个字母和至少一个数字,c#,regex,string,C#,Regex,String,我正在尝试验证密码是否至少包含一个字母和数字 下面的方法似乎不起作用 密码可以是“tester1”或“11111111 T”等 不能是所有字母或所有数字 有什么想法吗 const string pattern = @"/[a-z].*\d|\d.*[a-z]/"; var match = Regex.Match(password, pattern); 已解决: var rule1 = password.Any(char.IsLetter); var rule2 = pass

我正在尝试验证密码是否至少包含一个字母和数字

下面的方法似乎不起作用

密码可以是“tester1”或“11111111 T”等

不能是所有字母或所有数字

有什么想法吗

const string pattern = @"/[a-z].*\d|\d.*[a-z]/";
var match = Regex.Match(password, pattern);
已解决:

var rule1 = password.Any(char.IsLetter);
var rule2 = password.Any(char.IsNumber);
这也起到了作用:

const string pattern = @"[a-z].*\d|\d.*[a-z]";
这里有一个

((.*\d.*[a-zA-Z].*)|(.*[a-zA-Z].*\d.*))

模式周围的斜杠用于具有正则表达式文字的语言中。C#没有

从图案中删除斜线:

const string pattern = @"[a-z].*\d|\d.*[a-z]";
这样就可以了

^(?=.*[a-zA-Z])(?=.*[0-9]).+$

我正在使用
(?=)
来完成此操作,然后允许任何字符
执行一次或多次。通过这种方式,用户可以输入特殊字符、标点符号等。

我将使用更易于维护的简单规则,而不是使用正则表达式。例如:

var rule1 = str.All(char.IsLetter);
var rule2 = str.All(char.IsNumber);

您可以通过
char.IsLower
char.IsUpper
等来丰富您的规则。

Regex至少包含一个大写、一个小写、一个数字、一个特殊字符和至少8个字符:


^(?=.[a-z])(?=.[a-z])(?=.[0-9])(?=.[^a-zA-Z0-9:])(?=.{8,})

如果不是,必须不要使用正则表达式。这种方式更易于维护,更易于添加新规则。对于ex,请参阅第一个答案,并认为您希望为密码添加新的条件。我会亲自检查2个正则表达式,一个用于字母,一个用于数字。更简单的是way@SamIam不需要正则表达式按照你说的去做。Guffa已经说过了,但是在使用C#时,前导斜杠和尾随斜杠不应该在那里。这是你的问题之一。
str.Any()
,不是吗?(尽管我赞同非正则表达式的方法!)@dlev如果规则1或规则2是真的,那么不要接受它为passwd。@I4V否定的方法不起作用。以空字符串或只包含既不是字母也不是数字的字符的字符串为例。这些规则当然包含“至少一个字母和至少一个数字”,但这两个规则的计算结果都为false。当然,但在绝大多数情况下,但是
Any()
将检查较少的字符(因为大多数用户会有一些字母,但可能会忘记省略数字)。无论哪种方式,演示该用法的代码都会减轻混淆,我认为。@I4V-最好使用
Any()
并检查规则1和规则2是否都满足要求。这样效率更高,因为算法会更快终止。我可能会让那些
*
不贪婪。如果知道靠近开头的部分不是字母(或随后的数字),为什么要检查整个字符串?@Kenneth-那么您会将其更改为什么?只需将其设置为非贪婪:
*?
。不过这没什么大不了的。@KennethK.-我以为你就是这个意思。我也这样尝试过,没有任何性能差异(使用at的基准测试功能)。同意。将我的评论归于微观优化。我不怀疑这会有什么不同,直到弦很长。我刚刚养成了非常具体地指定模式的习惯。不过,有时候,你用哪种方式做并不重要!干杯=)