簡體   English   中英

試圖讓“完美的 URL 驗證正則表達式”在 ruby​​ 和 javascript 中工作

[英]Trying to get the "perfect URL validation regex" to work in ruby and javascript

我正在尋找最好的正則表達式來檢測文本中的 URL。 在嘗試了很多之后,我發現了這篇文章,作者證明了他的正則表達式是眾多中最強大的。 我試圖讓這個正則表達式在 Ruby 和 Javascript 中工作,但是 Rubular 和 Regexpal 都給了我錯誤。 當我試圖修復它們時,我沒有找到匹配項。 任何人都可以幫助我將這個正則表達式翻譯成 Ruby 和 Javascript 兼容版本。

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS

紅寶石:

result = subject.scan(/http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+/)

Javascript:

result = subject.match(/http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+/g);

在 ruby​​ 和 javascript 中工作的“完美的 URL 驗證正則表達式”可能是:

http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+

你看過源碼嗎? 嵌入了 Ruby 和 JS 端口: gist.github.com/dperini/729294

DMKE 通過將我鏈接到我忽略的一些來源,最好地回答了我最初的問題,所以我接受了他的回答。 但是在測試了@diegoperini 的正則表達式后,我有點不知所措。 我最終偶然發現了我在Daring Fireball上發現的以下正則表達式:

(?i)\\b((?:[az][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[. ]|[a-z0-9.-]+[.][az]{2,4}/)(?:[^\\s()<>]+|(([^\\s()<>] +|(([^\\s()<>]+))) ))+(?:(([^\\s()<>]+|(([^\\s()<>]+)) ) )|[^\\s`!()[]{};:'".,<>?«»“”'']))

它是自由的,接受端口號,沒有 http: 或 www. 的鏈接,但仍然設法通過了我的測試。 此外,它簡單易讀。 所以我會向那些想要快速、自由的 URL 正則表達式的人推薦這個正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM