【问题标题】:password validation using in bash script seems to confuse me in working在 bash 脚本中使用密码验证似乎让我在工作中感到困惑
【发布时间】:2014-03-10 11:39:35
【问题描述】:

我创建了一个简单的脚本来验证以下条件的密码

  1. 密码长度必须等于或大于 8。

  2. password 可选包含 a-z,A-z,0-9 表示用户仅通过字符、仅数字或字符和数字混合设置密码。

  3. 用户还可以在密码中混用这个字符,如#,$,+,*。

所以下面的密码应该匹配

ptr*1$#+22A
111111111BB
password123

但如果用户传递的字符超出标准意味着低于密码应拒绝,则它会拒绝。

 ptr*1$#+22A: //because ":" at the end of string which not in criteria 

我的脚本如下

#! /bin/bash

password="ptr*1$#+22A"

if [[ ${#password} -ge 8 && "$password" || *[A-Z]* || "$password" || *[a-z]* || "$password" || *[0-9]* && "$password" || *[*$#+]* ]]
then
    echo "pass"
else
    echo "fail"
fi

它正在匹配密码,但它也传递密码ptr*1$#+22A:,它必须拒绝。

脚本中的问题是如果在&& 之后任何一个语句为真,则条件为真。我已经用&& 代替|| 尝试了这个脚本,但它要求密码必须至少包含一个 符合标准的字符,这不是我的要求。

那么有人知道如何验证我的密码,使其符合我的标准吗?

【问题讨论】:

  • /^[A-Za-z0-9#$+*]{8,}$/
  • +1 你应该回答,不要放在这里,然后我们可以投票
  • @BMW 好点。完毕。 :)

标签: regex linux bash validation passwords


【解决方案1】:

可以将逻辑转换为单个正则表达式,该表达式仅允许您希望允许的那些字符,并且至少需要八个字符(我假设您可能需要将长度限制为可以存储在数据库字段中的任何内容,但你没有指定)

你的模式应该是这样的:

^[A-Za-z0-9#$+*]{8,}$

这会创建一个由合法字符组成的字符类,并量化需要多少这样的字符;最少八个。它锚定到字符串的开头和结尾,因此字符串必须只包含这些字符,从头到尾。

如果您还需要设置最大长度,可以将其放在量词中的逗号之后。

【讨论】:

  • 是不是这样if [[ "$password" == /^[A-Za-z0-9#$+*]{8,}$/ ]]?如果是,那么不工作,如果不是,那么告诉我我错在哪里?
  • [[ "$password" =~ ^[A-Za-z0-9#$+*]{8,}$ ]]
  • @BMW 我把它放在你的方式 if [[ "$password" =~ /^[A-Za-z0-9#$+*]{8,}$/ ]] 但它与密码不匹配 password123 你看它是有效的密码。
  • @BMW 现在可以用了,非常感谢..为什么不把它放在答案中,这样我就可以投票给你
  • @DavidO 感谢您的及时帮助。
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
相关资源
最近更新 更多