我想使用正则表达式来验证密码的字符要求。
要求: 密码应包含 16 个字符。
- 字符 1-4 应至少有 1 个数字。
- 字符 5-8 应至少有 1 个小写字符。
- 字符 9-12 应至少有 1 个大写字符。
- 字符 13-16 应至少有 1 个符号(标点符号)。
我尝试使用正则表达式进行正向预测,但它最终不起作用:
回显 'XXXX9999ccccXXX%' | grep -P '^((?=.*[0-9]).{4})((?=.*[a-z]).{4})((?=.*[A-Z]).{4 })((?=.*\pP).{4})$'
最佳答案
您的前瞻语法已关闭,因为它没有正确检查您在要求中提到的位置。以下正则表达式模式似乎对我有用:
^(?=.{0,3}\d)(?=.{4,7}[a-z])(?=.{8,11}[A-Z])(?=.{12,15}[.,$%^&!@]).{16}$
解释:
(?=.{0,3}\d) - number in positions 1-4
(?=.{4,7}[a-z]) - lowercase in positions 5-8
(?=.{8,11}[A-Z]) - uppercase in positions 9-12
(?=.{12,15}[.,$%^&!@]) - symbol in positions 13-16
Demo
我对 grep
或 Linux 的了解还不够深,无法评论您是否充分利用了该模式,但这至少应该可以解决您在模式方面遇到的任何问题。
关于regex - 正则表达式密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52640579/