c# - 密码的按需正则表达式

标签 c# javascript regex

我需要为密码创建一个正则表达式,其强度设置可以由客户端更改。强度参数如下:

enter image description here

最小和最大长度可以由 AngularJS ngMinlength 和 ngMaxlength 处理。

但是我需要生成一个正则表达式,该表达式将通过从数据库获取的参数动态创建。

我可以像这样从 JSON 中获取这些参数:

var minCharLength = pwdJSON.minCharLength;
var minCapCharLength = pwdJSON.minCapCharLength;
...
var regex = // What to do now?

我没有正则表达式制作的知识。另外,此正则表达式还将用于使用 C# 在服务器上进行验证。

最佳答案

我认为这样可以做到:

^(?=(?:.*[A-Za-z].*){6})(?=(?:.*[A-Z].*){1})(?=(?:.*[0-9].*){2})(?:[a-zA-Z0-9*#$%]){8,16}$

在末尾添加相关限制(字母、大写字母、数字、最小和最大长度)以及非逗号分隔的特殊字符

编辑添加带有变量的示例...您只需将字符串构建为正则表达式模式,然后用它进行测试

string regex = "^(?=(?:.*[A-Za-z].*){" + minCharLength + "})(?=(?:.*[A-Z].*){" + minCapCharLength + "})(?=(?:.*[0-9].*){" + minNumLength + "})(?:[a-zA-Z0-9" + specialChars + "]){" +  overallMinLength + "," + overallMaxLength + "}$"; 
bool isValid = Regex.IsMatch(password, regex);

EDIT2 - 我认为可能会感谢您的解释:-)

  • 我们使用 ^$ 将正则表达式锚定到整个字符串
  • 每个测试都是积极的前瞻(?= ),因此它会检查是否存在但不会移动位置
    • 测试有组 (?:.*[our_characterset].*){how_many_times} - 因此非捕获组可以有效地在字符串中的任何点搜索我们的字符(使用.*s) 正确的次数
  • 最后,我们得到了允许的字符(包括特殊字符),该字符必须存在于最小和最大长度之间(使用 {m,n})(带有 anchor )

正则表达式模式只是一个字符串 - 所以我们可以使用表单中的变量来构建它..

关于c# - 密码的按需正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25520667/

相关文章:

C# if 语句来测试值是否不是数字

c# - Visual Studio 上的新文件被标记为 Miscellaneous

javascript - 点击新添加的链接不执行javascript函数

javascript - 将字段属性添加到 firebase 中的文档

ajax - 如何在ajax请求中使用jmeter

c# - "async"是否在单独的线程中运行?

c# - 包含正则表达式定界符的简单且经过测试的在线正则表达式在 C# 代码中不起作用

javascript - Firebase .push() 抛出 'permission_denied' 错误

正则表达式捕获不包含目录链接的所有文件路径

javascript - 从 url 中提取版本标识符