繁体   English   中英

正则表达式C#密码删除空格

[英]regular expression c# password remove spaces

我有一个很好的正则表达式生成器,如下所示:

string numberOfDigits = "2";
string numberOfCaps = "2";
string numberOfChars = "3";
string numberOfNonAlpha = "3";
string minLength = "10";

string rexExString = "^(?=.*\\d{" + numberOfDigits + "})(?=.*[A-Z]{" + numberOfCaps + "})(?=.*[a-z]{" + numberOfChars + "})(?=.*[!@#$%^&*()]{" + numberOfNonAlpha + "}).{" + minLength + ",}$";

输出将是:

^(?=.*\d{2})(?=.*[A-Z]{2})(?=.*[a-z]{3})(?=.*[!@#$%^&*()]{3}).{10,}$

这样,我可以指定我要输入多少个数字,字符,非字母等。 我想保持这种方式。 唯一的问题是它也接受空格,而我不希望将其用作密码。

我的问题

如何在我的正则表达式中不允许使用空格,而是将其保留为格式,以便我可以像上面的示例一样指定变量。

^(?=.*\d{2})(?=.*[A-Z]{2})(?=.*[a-z]{3})(?=.*[!@#$%^&*()]{3}).{10,}$

最后,您可以指定应该至少包含10个非空格字符\\S{10,}$而不是使用.{10,}$ \\S{10,}$

\S{" + minLength + ",}$

请注意大写S。

问题不在于格式中的空格,而是问题在于您允许所有字符都以.{10,}结尾。

试试这个

\S{10,}

\\S不是空格(与[^\\s]

顺便说一句。 您是否知道要以(?=.*\\d{2})的顺序包含2位数字,而不是总共2位数字? 这意味着Foo1bar2将不被接受。

如何简化呢?

将您的所有需求放到一个正则表达式中有点困难。 特别是如果您希望允许在密码之间而不是按顺序分配可配置的位数。

为什么不稍微拆分一下此验证过程。

您可以首先检查^\\S{10,}$以确保密码中至少包含10个非空白字符。

然后,您可以计算字符的类型,例如:

MatchCollection uppercase = Regex.Matches(s, @"\p{Lu}");
MatchCollection lowercase = Regex.Matches(s, @"\p{Ll}");
MatchCollection digits = Regex.Matches(s, @"\p{N}");
MatchCollection nonAlpha = Regex.Matches(s, @"[\p{N}\p{L}]");

Console.WriteLine("Upper: " + uppercase.Count);
Console.WriteLine("Lower: " + lowercase.Count);
Console.WriteLine("Digits: " + digits.Count);
Console.WriteLine("NonAlpha: " + nonAlpha.Count);

只需匹配所需类的一个字符,然后使用MatchCollectioncount()方法获得这些字符的count()

我在这里使用了Unicode属性( \\p{...} ),您可以轻松地将其更改为所需的字符类。 这是有关regular-expressions.info上的Unicode属性概述

然后,您可以获取每种字符类型的数量并将其与该特定类型所需的数字进行比较。

这将是一个更具可读性和可维护性的功能。

Regex rx = new Regex(@"^((?<N>[0-9])|(?<CU>[A-Z])|(?<CL>[a-z])|(?<NA>[!@#$%&*()^])| )*$(?<-N>){3}(?<-CU>){1}(?<-CL>){2}(?<-NA>){4}");

此正则表达式使用平衡组来“累积”各种类型的字符。 它将拒绝不在(那些组加空格)中的字符。 因此,例如è将被拒绝。 如果要更改它,请替换| ) | )|.)

在字符串( $ )的末尾,它检查所有“堆栈”中是否有足够的字符。 清楚地看到{3}, {1}, {2}, {4}您必须输入数字。

请注意,此正则表达式的有趣之处在于它将适用于1!A!a!2!b3 如果您希望各种类别的字符是连续的(所以123Abc!!!! ),那么此正则表达式不是“好”的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM