URI
パッケージを使うと便利です。
iex(5)> URI.parse("https://account.idcfcloud.com/auth/login?service=https%3A%2F%2Fconsole.idcfcloud.com%2F%3Fcl%3Drn_lgin")
%URI{authority: "account.idcfcloud.com", fragment: nil,
host: "account.idcfcloud.com", path: "/auth/login", port: 443,
query: "service=https%3A%2F%2Fconsole.idcfcloud.com%2F%3Fcl%3Drn_lgin",
scheme: "https", userinfo: nil}
要するにhost
の部分はnil
であるかをチェックするといいです。
defmodule Validation do
def validate_uri(str) do
uri = URI.parse(str)
case uri do
%URI{host: nil} -> {:error, uri}
uri -> {:ok, uri}
end
end
end
iex(1)> Validation.validate_uri("abc")
{:error,
%URI{authority: nil, fragment: nil, host: nil, path: "abc", port: nil,
query: nil, scheme: nil, userinfo: nil}}
iex(2)> Validation.validate_uri("http://google.com")
{:ok,
%URI{authority: "google.com", fragment: nil, host: "google.com", path: nil,
port: 80, query: nil, scheme: "http", userinfo: nil}}