【问题标题】:Bash script check string for uppercase letterBash 脚本检查字符串是否为大写字母
【发布时间】:2017-03-10 17:53:28
【问题描述】:

我正在尝试检查任何大写字母的字符串。我的代码显示任何输入都没有大写,可能是“sss”、“Sss”、“SSS”

if [[ "$pass" =~ [^a-zA-Z0-9] ]]
then
   echo "Upper found"
else
   echo "no upper"
fi

【问题讨论】:

  • 你认为正则表达式匹配的是什么?为什么你里面有小写字母a-z和数字0-9

标签: linux unix terminal git-bash uppercase


【解决方案1】:

无论我如何运行这个脚本,我都遇到了麻烦,直到我将它更改为让我的输入字符串为 $1,然后设置 pass=$1。我还稍微更改了正则表达式。我终于可以正常工作的内容如下。然后我可以运行 bash (script) John 并获得有效响应。希望这会有所帮助。

pass=$1
if [[ "$pass" =~ ^[A-Z] ]]
then
   echo "Upper found"
else
   echo "No Upper"
fi

【讨论】:

    【解决方案2】:

    你的正则表达式是错误的。使用 [A-Z] 或 [:upper:]。

    https://en.wikipedia.org/wiki/Regular_expression

    【讨论】:

    • 给你一个提示:[:upper:] 和所有其他类似的只代表类,为了匹配,你需要在它们上面多加一层括号。所以[A-Z] 等价于[[:upper:]]
    • @HuStmpHrrr:在locale的某些设置下等效。
    • 这里不涉及正则表达式。 Bash 有自己的通配语法,尽管它与正则表达式有一些共同点。
    【解决方案3】:

    [^a-zA-Z0-9] 表示除a-z(即小写字母)、A-Z(即大写字母)和0-9(即数字)之外的任何内容。 sssSssSSS 都只包含字母,因此无法匹配。

    [[ $password =~ [A-Z] ]]
    

    如果密码包含任何大写字母,则为真。

    你应该在运行这种测试之前设置LC_ALL,例如

    $ LC_ALL=cs_CZ.UTF-8 bash -c '[[ č =~ [A-Z] ]] && echo match'
    match
    $ LC_ALL=C           bash -c '[[ č =~ [A-Z] ]] && echo match'
    # exit-code: 1
    

    [[:upper:]] 应该始终有效。

    【讨论】:

    • 只有小写和数字,它将是 [^a-z^0-9]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多