如何验证长生不老药中的网址?

asi*_*niy 3 elixir

我想验证uris,如:

http://vk.com
http://semantic-ui.com/collections/menu.html
https://translate.yandex.ru/?text=poll&lang=en-ru
Run Code Online (Sandbox Code Playgroud)

并不是

www.vk.com
abdeeej
http://vk
Run Code Online (Sandbox Code Playgroud)

但还没有找到任何本机代码实现包。

我怎样才能做到这一点?

Dog*_*ert 12

根据规范,所有这些在技术上都是有效的 URL,因此为所有人URI.parse/1返回一个%URI{}结构,但如果您想拒绝 中没有 ascheme和点的域host,您可以执行以下操作:

valid? = fn url ->
  uri = URI.parse(url)
  uri.scheme != nil && uri.host =~ "."
end
Run Code Online (Sandbox Code Playgroud)

测试:

urls = [
  "http://vk.com",
  "http://semantic-ui.com/collections/menu.html",
  "https://translate.yandex.ru/?text=poll&lang=en-ru",
  "www.vk.com",
  "abdeeej",
  "http://vk"
]

urls |> Enum.map(valid?) |> IO.inspect
Run Code Online (Sandbox Code Playgroud)

输出:

[true, true, true, false, false, false]
Run Code Online (Sandbox Code Playgroud)