【发布时间】:2012-04-19 07:49:15
【问题描述】:
我有以下正则表达式来检查密码策略。它已被验证可以工作:
(^([zZ]\d{3})*$)|((?=.{9,})(?=.*?[^\w\s])(?=.*?[0-9])(?=.*?[A-Z]).*?[a-z].*)
我想在 bash 脚本中使用正则表达式来通过以下方式验证 psssword:
echo $password | grep "(^([zZ]\d{3})*$)|((?=.{9,})(?=.*?[^\w\s])(?=.*?[0-9])(?=.*?[A-Z]).*?[a-z].*)"
if [[ $? -eq 0 ]] ; then
这在 bash 中不起作用。 我的问题是:
如何将这个“纯”正则表达式转换为在 bash 中工作的正则表达式?我需要转义哪些字符,将正则表达式传递给 grep 的正确方法是什么?还有什么需要注意的吗?
谢谢
【问题讨论】:
-
与您的问题无关:这是一个奇怪的密码策略。一组有效的密码以
z开头,之后正好是三位数字?我的 手机 可以在几秒钟内破解 :) -
@TimPietzcker 我不是正则表达式专家,但这应该符合
at least 9 characters, with at least one character from each of the 4 character classes (alphabetic lower and upper case; numeric, symbols).的政策,不过你是对的,我应该更正第一部分 -
更糟糕的是:即使是空字符串也可以作为密码!我将在我的答案中添加分析。