检查有效链接(URL)

Min*_*int 10 validation url bash hyperlink

我正在阅读另一个问题,这个问题对于这项工作有一些非常好的正则表达式,但据我所知,由于BASH命令不支持这种复杂的rexeg,因此我们可以看到它们不能与BASH命令一起使用.

if echo "http://www.google.com/test/link.php" | grep -q '(https?|ftp|file)://[-A-Z0-9\+&@#/%?=~_|!:,.;]*[-A-Z0-9\+&@#/%=~_|]'; then 
    echo "Link valid"
else
    echo "Link not valid"
fi
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为grep -q不起作用......

编辑,好吧我刚刚意识到grep有一个"扩展正则表达式"(-E)选项,似乎可以使它工作.但如果有人有更好/更快的方式,我仍然会喜欢这里.

Pau*_*ce. 21

以下适用于Bash> =版本3.2而不使用grep:

regex='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]'
string='http://www.google.com/test/link.php'
if [[ $string =~ $regex ]]
then 
    echo "Link valid"
else
    echo "Link not valid"
fi
Run Code Online (Sandbox Code Playgroud)

你的正则表达式似乎不包括小写字母字符,[a-z]所以我在这里添加它们.

  • 错误的`http://печки-лавочки.рф/`这是一个有效的URL.可以在http://stackoverflow.com/questions/161738找到更完整的正则表达式 (3认同)
  • @rubo77:我只是复制了OP的正则表达式。我已经编辑了我的答案,因此它现在支持更大的字符集。 (2认同)

小智 5

由于我没有足够的代表来评论上面的内容,我将用这个来修改上面丹尼斯给出的答案。

我将 Christopher 的更新合并到正则表达式中,然后添加了更多内容,以便 URL 至少必须采用以下格式:

http://ww(其中必须有句点)。

并稍微调整了输出:)

regex='^(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]\.[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]$'

url='http://www.google.com/test/link.php'
if [[ $url =~ $regex ]]
then 
    echo "$url IS valid"
else
    echo "$url IS NOT valid"
fi
Run Code Online (Sandbox Code Playgroud)