Dev Note | 如何利用正規表達式驗證網址格式

更新 發佈閱讀 9 分鐘

關於這篇文章:

  • 驗證網址格式:此文主要介紹了如何利用正規表達式來驗證使用者輸入的網址,並且仔細說明這裡使用到的每個符號的作用,讓大家更好理解。
  • HTTPS 與 HTTP 的差別:簡單說明了 HTTPS 和 HTTP 之間的不同,特別是為什麼現代網站大多選擇 HTTPS,來保護大家的資料安全。
  • 伺服器會幫你自動跳轉:當伺服器有強制 HTTPS 時,就算使用者只輸入 http:// 或單純的域名,伺服器也會很貼心地自動把你導向 https://。
  • 測試範例分享:文中也展示了幾個範例,像是有沒有加上 https:// 或是不同層次的域名,最後都能成功驗證。

在開始前,可以先參考MDN文件:Regular expressions 正規表達式

在驗證網址格式之前,我們可以先使用 Postman 測試輸入的 Body raw 是否正確,並確認是否有錯誤訊息彈出。

如下圖所示,當資料庫和後端程式碼都設置成功時,會回傳 success。

raw-image

但是,由於我們還需要進一步驗證 videoLink 是否為有效網址,因此需要在程式中加入一些函數進行網址格式驗證。


簡單介紹 HTTP 和 HTTPS:


當我們談到網址時,最常見的就是大家熟悉的 HTTPHTTPS。這裡簡單介紹一下兩者的差異:

  1. HTTPS (HyperText Transfer Protocol Secure):

HTTPS 是 HTTP 的加密版本,使用 SSL/TLS 協議來加密傳輸中的數據,保護資料的機密性和完整性,特別是對於敏感資料(如登入密碼、個人資訊等)。HTTPS 網站通常會顯示一個鎖頭圖標,表示該網站是安全的。

  1. HTTP (HyperText Transfer Protocol):

相較之下,HTTP 是明文傳輸協議,數據在傳輸過程中沒有加密,因此更容易受到攔截或篡改,這也使得 HTTP 網站更容易遭受中間人攻擊,導致敏感資訊洩露。


看完這些簡單說明,大家應該可以更理解 HTTP 和 HTTPS 之間的差異。如今大部分網站和應用程式都已經強制使用 HTTPS,特別是涉及個人資料、金流等敏感資訊的網站。

驗證網址格式的正規表達式:


為了驗證使用者輸入的網址格式正不正確,我們可以使用正規表達式來處理,我們先來看加入以下驗證函式後,且在 Body raw 的輸入值都不變的情況下,會不會出現錯誤訊息:

isValidUrl: (string) => {

// 使用正規表達式來驗證 URL 是否有效

const urlPattern = /^(https:\/\/)?([\da-z-]+\.)+[\da-z-]+(\/[\w-./?%&=]*)?$/i

return urlPattern.test(string)

}


如下圖所示,在 Body raw 都不變的情況下,顯示了無效 URL 的錯誤訊息。

raw-image


接下來,讓我們來逐一解釋這個正規表達式中每個符號的意思:

const urlPattern = /^(https:\/\/)?([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?$/i


1. /^

/:正規表達式的開始符號。通常在程式中,正規表達式會包在斜線 / 之間。

^:錨點,表示必須從字串的開始匹配,也就是說這個正規表達式只能匹配以特定格式開頭的字串。


2. (https:\/\/)?

():捕獲組,這裡是用來匹配 https:// 的部分。

捕獲組(Capturing Group)是一個正規表達式中的子模式,通常用來將匹配的部分內容提取出來。用小括號 () 包圍的部分稱為捕獲組,也可稱群組,匹配成功後,該組中的內容會被「捕獲」以便後續使用。舉例來說,如果你想要從一個完整的網址中提取出域名,你可以將域名部分包裝在捕獲組中,這樣它可以被單獨存取或分析。

https: 匹配字面上的 https。

\/: \ 是轉義符號,因為 / 是特殊字元,所以要用 \/ 來表示真正的斜線 /,這裡的 \/\/ 表示要匹配兩個斜線 //

?: 表示前面的 https:// 是可選的(出現 0 次或 1 次),因此網址可以有 https:// 開頭,也可以沒有。


3. ([\da-z-]+\.)+

():一樣表示一個捕獲組,這裡匹配主域名和次域名部分。

[]:是字符集合,匹配這個集合中的任意字符。

\d: 表示任意的數字(0-9)。

a-z: 表示從小寫字母 a 到 z 的任何一個字母。

-: 表示連字符號,允許在域名中出現。

(因為域名不能有 _ 所以這裡不能使用 \w。)

\.: \ 是轉義符號,因為 . 是特殊字元,必須轉義才能表示真正的點 .。通常用於分隔域名層級(例如 example.com 中的 .)。

+: 表示前面的模式可以出現一次或多次。這意味著可以匹配像 example.comsub.example.comwww.example.com 等域名,至少有一個「字元加上點」的結構。


4. [\da-z-]+

[\da-z-]+: 這個部分和之前類似,這裡通常是匹配頂級域名(例如 .com、.org 等)。

這裡沒有後面的 \.,說明這是域名的最後一部分(也叫做頂級域名 Top-level Domain)。


5. (\/[\w-./?%&=]*)?

():捕獲組,用於匹配 URL 的路徑部分(如果有的話)。

\/: 匹配 URL 路徑的開始斜線 /

[\w-./?%&=]*

\w: 表示字母(a-z, A-Z)、數字(0-9)或底線(_)。

-: 匹配連字符號。

.: 匹配點號(這裡就不需要轉義了,因為在 [] 中即表示字面上的點)。

/: 匹配斜線 /

?%&=: 匹配這些特殊字元,它們經常出現在 URL 查詢參數中(例如 ?id=123&name=abc)。

*: 表示前面的字符集合可以出現 0 次或多次。也就是說,這部分的 URL 路徑和查詢參數是可選的,但如果有的話,可以有多個字符。

?: 整個路徑部分是可選的,URL 可以不包含路徑。


6. $/

$:錨點,表示字串的結尾。這意味著正規表達式必須匹配整個字串到最後。

/:正規表達式的結束符號。


7. i

忽略大小寫標誌。這意味著正規表達式在匹配時不區分字母大小寫,例如 HTTPS://example.com 也會被視為有效網址。


最後再來看 .test() 的用法:

return urlPattern.test(string)

.test() 是正規表達式內建的方法,用來測試給定的字串是否符合該正規表達式。它會返回一個布林值(true or false),表示字串是否通過驗證。


接著,我們來修改一下 Body raw 裡的值,再次用 postman 測試看看:

  1. 如下圖所示,由於我們將 https:// 設定為可選項,因此即使只輸入 123.com,也能通過驗證​。
補充說明:
如果伺服器設定了強制 HTTPS,那麼當使用者輸入 http://123.com 或只是 123.com,伺服器會自動重定向到 https://123.com
raw-image
  1. 如下圖所示,因為我們有設定域名可以出現一次或多次,所以 www.123.com 也是可以通過驗證的。
raw-image
  1. 如下圖所示,輸入標準的 https://123.com 也會通過驗證,並返回成功訊息。
raw-image

希望這篇文章能幫大家對正規表達式和網址驗證有更多認識。這些內容都是我東查西找再加上自己的理解整理出來的。如果有哪裡講得不對或是可以更好的地方,請一定要告訴我喔!每一個意見都是幫助我進步的養分 🫶🏻

留言
avatar-img
留言分享你的想法!
avatar-img
DevPaws Journal
0會員
2內容數
這裡是我的學習日記,主要記錄我在程式開發旅程中遇到的挑戰,以及問題的解決過程。希望我的筆記能夠幫助到和我一樣正在努力學習的夥伴們! 除了程式分享,這裡還會偶爾更新我身為寵物保姆的照顧小故事,還有一些我畫的寵物似顏繪作品 🐾。 如果你看到內容有任何錯誤或覺得有需要補充的地方,隨時歡迎與我交流,我非常樂於學習和成長!
你可能也想看
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
這篇文章介紹瞭如何利用正則表達式來驗證網址格式,並詳細解釋每個符號的作用。文章也簡要說明瞭 HTTP 和 HTTPS 之間的差異,並探討了現代網站為何傾向於使用 HTTPS 以保障資料安全。此外,還提供了測試範例,讓讀者能更好理解網址驗證的過程和原理。
Thumbnail
這篇文章介紹瞭如何利用正則表達式來驗證網址格式,並詳細解釋每個符號的作用。文章也簡要說明瞭 HTTP 和 HTTPS 之間的差異,並探討了現代網站為何傾向於使用 HTTPS 以保障資料安全。此外,還提供了測試範例,讓讀者能更好理解網址驗證的過程和原理。
Thumbnail
隨著數位時代的來臨,網站安全性變得越來越重要。SSL(Secure Sockets Layer)證書是一個用於加密在網站和使用者之間傳輸的數據的安全技術。而對於新聞網站來說,使用SSL證書不僅可以提高網站的安全性,還可以對搜索引擎優化(SEO)產生積極影響。
Thumbnail
隨著數位時代的來臨,網站安全性變得越來越重要。SSL(Secure Sockets Layer)證書是一個用於加密在網站和使用者之間傳輸的數據的安全技術。而對於新聞網站來說,使用SSL證書不僅可以提高網站的安全性,還可以對搜索引擎優化(SEO)產生積極影響。
Thumbnail
首先,這是一篇嘗試文,並不保證成效。僅說明,當時我學習的過程。
Thumbnail
首先,這是一篇嘗試文,並不保證成效。僅說明,當時我學習的過程。
Thumbnail
自媒體時代來臨,各行業類型的自媒體網站如雨後春筍般湧出,遭受網路攻擊的網站數量也比往年增加。自媒體網站嚴格說來是一項數位資產,但人們對於其保護的概念還不夠完整,總是認為網站規模還小沒有人會去侵略它,況且自媒體網站通常不會有金流,哪需要 SSL 憑證 保護?
Thumbnail
自媒體時代來臨,各行業類型的自媒體網站如雨後春筍般湧出,遭受網路攻擊的網站數量也比往年增加。自媒體網站嚴格說來是一項數位資產,但人們對於其保護的概念還不夠完整,總是認為網站規模還小沒有人會去侵略它,況且自媒體網站通常不會有金流,哪需要 SSL 憑證 保護?
Thumbnail
文章最後將會提供一套CSP安全檢查工具,保護自身,避免踏入不安全地帶! 🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔 為什麼制定安全政策這麼重要呢? 可以制定哪些規則呢? 這邊僅著重於概念的描述,因此列出幾個常見的來源白名單配置選項,至於完整選項請參考這裡。
Thumbnail
文章最後將會提供一套CSP安全檢查工具,保護自身,避免踏入不安全地帶! 🔔還沒成為Potato會員的朋友點這裡加入哦,撰寫文章還能挖礦打造被動收入 🔔 為什麼制定安全政策這麼重要呢? 可以制定哪些規則呢? 這邊僅著重於概念的描述,因此列出幾個常見的來源白名單配置選項,至於完整選項請參考這裡。
Thumbnail
在資訊安全越來越受重視的現在,就算用白紙黑字的合約說會保護使用者隱私,對資訊從業人員來說仍然不夠。到底要怎麼做,我們才能做到極致的隱私保護呢? 縮圖來源:https://www.pexels.com
Thumbnail
在資訊安全越來越受重視的現在,就算用白紙黑字的合約說會保護使用者隱私,對資訊從業人員來說仍然不夠。到底要怎麼做,我們才能做到極致的隱私保護呢? 縮圖來源:https://www.pexels.com
Thumbnail
互聯網的時代中我們幾乎都離不開網路,那如果能夠對於Web具備基礎的知識,就能夠讓我們在使用網路的過程中提升風險意識,以減少被竊取、盜用的風險,進而保護個人資產,因此多一份知識在身上也就等於多了一份防身的武器,一天學一點,透過微習慣讓我們享受複利的效應。 CRSF攻擊示意圖 如何防範CSRF?
Thumbnail
互聯網的時代中我們幾乎都離不開網路,那如果能夠對於Web具備基礎的知識,就能夠讓我們在使用網路的過程中提升風險意識,以減少被竊取、盜用的風險,進而保護個人資產,因此多一份知識在身上也就等於多了一份防身的武器,一天學一點,透過微習慣讓我們享受複利的效應。 CRSF攻擊示意圖 如何防範CSRF?
Thumbnail
SSL的好處: 資訊安全度提升:避免駭客攔截你的網路請求 用戶信任度提升:有綠色小勾勾在網址欄上,使用者對企業信任度提高 SEO排名上升:有利於潛在客戶搜尋到你的網站 所以,我們要如何選擇SSL... Medium全文:https://bit.ly/3dvaJvY
Thumbnail
SSL的好處: 資訊安全度提升:避免駭客攔截你的網路請求 用戶信任度提升:有綠色小勾勾在網址欄上,使用者對企業信任度提高 SEO排名上升:有利於潛在客戶搜尋到你的網站 所以,我們要如何選擇SSL... Medium全文:https://bit.ly/3dvaJvY
Thumbnail
1. 設定cookie為HttpOnly 在一般的情況下,cookie是可以透過javascript來存取的(document.cookie),如同上一篇所說的,有可能會有XSS攻擊的風險。 將cookie設定為HttpOnly,表示這個cookie無法透過js存取。
Thumbnail
1. 設定cookie為HttpOnly 在一般的情況下,cookie是可以透過javascript來存取的(document.cookie),如同上一篇所說的,有可能會有XSS攻擊的風險。 將cookie設定為HttpOnly,表示這個cookie無法透過js存取。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News