regex - 正则表达式密码验证

标签 regex pcre assertion

我想使用正则表达式来验证密码的字符要求。

要求: 密码应包含 16 个字符。

  1. 字符 1-4 应至少有 1 个数字。
  2. 字符 5-8 应至少有 1 个小写字符。
  3. 字符 9-12 应至少有 1 个大写字符。
  4. 字符 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/

相关文章:

javascript - 提取两个字符之间的文本

php - preg_split 与 mb_split

c++ - 为什么 PCRE 静态库在 Win 和 Linux 上大小不同

regex - 正则表达式只匹配最小的

Cypress 断言,验证某些文本是否存在类

assertion - 量化权限和通配符的预期错误或不完整?

azure - 修改 Azure 断言中发送的组属性名称值?

mysql - 如何: Select from MYSQL text field type only the numbers that start with 89 using REGEXP?

regex - Perl:匹配制表符分隔文件中的确切单词

php - 如何制作正则表达式来测试用户名复杂性要求?