我想使用正则表达式来验证密码的字符要求。
要求:密码应该有16个字符。
我尝试过使用正则表达式进行积极的展望,但它最终无法工作:
echo 'XXXX9999ccccXXX%' | grep -P '^((?=.*[0-9]).{4})((?=.*[a-z]).{4})((?=.*[A-Z]).{4})((?=.*\pP).{4})$'
发布于 2018-10-04 06:53:09
您的查找语法已关闭,因为它没有正确地检查您在需求中提到的位置。下面的regex模式似乎适用于我:
^(?=.{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
我不太了解grep或Linux,不足以评论您是否在最佳使用,但这至少可以解决您在模式中遇到的任何问题。
发布于 2018-10-04 06:56:45
你可以用
^(?=.{0,3}\d).{4}(?=.{0,3}[a-z]).{4}(?=.{0,3}[A-Z]).{4}(?=.{0,3}[\W_]).{4}$请参阅这个演示
基本上,该模式包括四个前瞻性消费模式部分,因为每个消费模式匹配4个字符,因此它总共匹配16个字符的字符串(请注意,^和$锚点也很重要)。
详细信息
^ -字符串的开始(?=.{0,3}\d) -在0到3个字符之后必须有一个数字.{4} -任何4个字符都会被消耗。(?=.{0,3}[a-z]) -在0到3个字符之后必须有一个小写字母.{4} -任何4个字符都会被消耗。(?=.{0,3}[A-Z]) -在0到3个字符之后必须有大写字母.{4} -任何4个字符都会被消耗。(?=.{0,3}[\W_]).{4} -在0到3个字符之后必须有一个特殊的字符(非字母数字)。$ -字符串的结尾https://stackoverflow.com/questions/52640579
复制相似问题