Regex 密码正则表达式-排除某些字符

Regex 密码正则表达式-排除某些字符,regex,validation,passwords,blacklist,Regex,Validation,Passwords,Blacklist,我需要按照以下标准进行密码验证: -至少一个大写字母; -至少一个小写字母; -至少在数字上; -可能包括一些特殊字符; -长度必须介于8和12之间 我开发了以下内容: (?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!#$&%*_+-=?|]).{8,12} 但最近,需求发生了变化,我需要实现一个字符黑名单,例如: -密码不得包含字母“o”或“o”;//Oscar的小写和大写字母O -密码不能有数字0;//零号 我如何保持最初的需求并添加这些新的验证? 谢谢

我需要按照以下标准进行密码验证: -至少一个大写字母; -至少一个小写字母; -至少在数字上; -可能包括一些特殊字符; -长度必须介于8和12之间

我开发了以下内容:

(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!#$&%*_+-=?|]).{8,12}
但最近,需求发生了变化,我需要实现一个字符黑名单,例如: -密码不得包含字母“o”或“o”;//Oscar的小写和大写字母O -密码不能有数字0;//零号

我如何保持最初的需求并添加这些新的验证? 谢谢


<强> jb

问题是连字符出现在字符类的中间。连字符只有在字符类中是第一个或最后一个时才可以保持不替换,因此以下正则表达式应该可以工作:

(?!.*[oO0])(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!#$&%*+=?|-]).{8,12}

现场演示:嗨,谢谢你的反馈,但我不清楚你的答案。我使用的正则表达式对于初始需求来说工作得很好。但我需要知道如何使用例如:-至少有一个小写字母,不包括我的字母“o:(?=.*[a-z]),如果我将其更改为:(?=.*[a-np-z]),它将只验证从“a”到“n”和从“p”到“z”的至少一个小写字母。我希望在出现“o”Hello时验证失败,并再次感谢您的反馈。我在前面尝试过这种方法,但不起作用,因为它只排除了一个正好有“o”、“o”或/和“0”的密码。。。或者以我做的简单测试中的一个字符结尾:@“(?!.[abc])(?=.[a-z]){1,10}”;测试密码:“a”-失败的“b”-失败的“c”-失败的“qwerty”-通过的“hello”-通过的“abc”-失败的“helloa”-失败的“heallo”-通过的“ahello”-通过的不确定,请参阅此演示:案例2和3它拒绝
aoC!Xyz1
但接受abC!Xyz1为什么您关心密码有或没有字母?“不可以”规则的意义是什么?我会告诉你的老师拿出一个真实世界的场景。你的“问题”读起来是一些被遗忘已久的测试中的问题,很久以前为了追求现实而放弃了:)