gpt4 book ai didi

c# - 包含拉丁字符的正则表达式

转载 作者:太空狗 更新时间:2023-10-30 01:30:00 25 4
gpt4 key购买 nike

我有一个正则表达式来确保密码有大写和小写字符并限制在几个符号内:

^(?:(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[$@$!%*?&,;.:-_])[A-Za-z\d$@$!%*?&,;.:-_]+)?$

注意:它允许空密码。我正在用另一种方式检查。

但是它不允许使用 ç、á、õ 等拉丁字符。

如何添加这种类型的字符?

更新

我正在尝试创建一个与 Microsoft 选项同步的密码验证正则表达式,例如:

RequireDigit (Default = true) 
Requires a number between 0-9 in the password.

RequireNonAlphanumeric (Default = true)
Requires a non-alphanumeric character in the password.

RequireUppercase (Default = true)
Requires an upper case character in the password.

RequireLowercase (Default = true)
Requires a lower case character in the password.

RequiredUniqueChars (Default = 1)
Requires the number of distinct characters in the password

微软文档:https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?tabs=aspnetcore2x

所以我希望每个正则表达式都带有 block ,这样我就可以通过添加或删除规则并进行任意组合来简单地更改它。

这有意义吗?

最佳答案

概览

限制密码通常是不好的做法,所以如果有此意图,请不要使用以下正则表达式。无论如何,我知道有些人喜欢至少确保存在一些字符集(大写、小写、数字、符号等),并且在特殊情况下需要这样的东西。下面的正则表达式确保在至少 8 个字符的字符串中至少存在一个小写字母、大写字母、数字和符号(在任何语言/脚本中)。

正如问题下方的评论所暗示的那样,将密码限制为特定字符集或特定格式只是​​自找麻烦。根据 @maccettura 的建议,攻击者可以过滤字典攻击并消除大量与您的密码格式不匹配的字典项。例如编写 [A-Za-z\d$@$!%*?&,;.:-_],攻击者可以简单地删除任何包含字符以外的字符的密码列表。该列表也只包含 75 个字符。 75 个字符的排列有多少种?对于长度为 8 个字符的密码,即 680,240,886,192,000 排列(如果我们删除与下面的正则表达式不匹配的密码,则更少)。您的 CPU 破解密码需要多长时间?

请参阅以下有关密码的 StackExchange 帖子:

其他文章:

代码

See regex in use here

^(?=\P{Ll}*\p{Ll})(?=\P{Lu}*\p{Lu})(?=\P{N}*\p{N})(?=.*[^\p{‌​L}\p{N}\p{C}]).{8,}$

解释

\p{x} 表示 x

指定的 Unicode 通用类别或命名 block
  • ^ 在行首声明位置
  • (?=\P{Ll}*\p{Ll}) 确保任何脚本中至少存在一个小写字母
  • (?=\P{Lu}*\p{Lu}) 确保任何脚本中至少存在一个大写字母
  • (?=\P{N}*\p{N}) 确保任何脚本中至少存在一个数字字符
  • (?=.*[^\p{‌ L}\p{N}\p{C}]) 确保存在除字母、数字或控制字符以外的任何字符
  • .{8,} 确保密码长度至少为 8 个字符(并且不限制上限)
  • $ 在行尾断言位置

关于c# - 包含拉丁字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48214008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com