2016-08-19 76 views
0

我想验证的URI,如:如何在elixir中验证url?

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 

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

我该怎么做?

+1

'http:// vk'是一个完全有效的URL。你想拒绝主机名不包含任何“。”的URL吗? – Dogbert

+0

你为什么认为'http:// vk'是一个完美的网址?域名在哪里? – asiniy

+1

'http:// localhost'是一个有效的URL。 http://stackoverflow.com/questions/20573488/why-does-html5-form-validation-allow-emails-without-a-dot – Dogbert

回答

3

所有这些都是根据规范,这样URI.parse/1返回%URI{}结构为所有技术上有效的网址,但如果你要拒绝域没有scheme,并在host一个点,你可以这样做:

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

测试:

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 

输出:

[true, true, true, false, false, false] 
+0

没有人提供别的东西。伤心!但是,谢谢你! – asiniy