Clojure Regex:如果string是一个URL,则返回字符串

Hen*_*Zhu 2 regex clojure clojurescript

如何在Clojure中返回给定字符串的有效URL.

 (re-matches #"????" "www.example.com"))
 (re-matches #"????" "http://example.com"))
 (re-matches #"????" "http://example.org")) // returns "http://example.org"
 (re-matches #"????" "htasdtp:/something")) // returns nil
Run Code Online (Sandbox Code Playgroud)

nta*_*lbs 10

验证URL并不简单.也许用regexp验证它太复杂了.幸运的是,有一个名为Apache Commons的库,其中包含UrlValidator.

由于Clojure可以使用Java库,因此您可以使用Apache Commons的UrlValidator来验证程序中的URL.

首先,在你的project.clj.中添加依赖.在依赖关系向量中添加以下行.

[commons-validator "1.4.1"]
Run Code Online (Sandbox Code Playgroud)

然后,您可以定义一个valid-url?返回布尔值的函数.

(import 'org.apache.commons.validator.UrlValidator)

(defn valid-url? [url-str]
  (let [validator (UrlValidator.)]
    (.isValid validator url-str)))
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用此功能执行所需操作.或者,您可以修改上述函数,以在其参数为有效URL时返回URL字符串.

  • 如果你需要clojurescript而不是clojure中的这种功能,请使用类似的方法,但使用javascript库而不是java.请记住,虽然clojure和clojurescript非常相似,但它们并不完全相同.特别地,互操作层是不同的.Clojure基于java并具有Java对象的底层接口.Javascript不是OO语言,因此在互操作方面具有略微不同的行为/限制.但是,您可以导入javascript库,因此请选择您喜欢的具有URL验证功能的lib并使用它. (3认同)