建立符合最佳做法的註冊表單

使用跨平台瀏覽器功能,建構安全、無障礙且易於使用的註冊表單。

如果使用者需要註冊網站,註冊表單的設計就非常重要。如果使用者連線不佳、使用行動裝置、趕時間或壓力大,這點尤其重要。設計不佳的註冊表單會導致跳出率偏高。每次跳出都可能代表失去一位顧客和一位不滿的使用者,而不只是錯失註冊機會。

導入方式

以下列出建立成功註冊表單的最重要準則。

使用有意義且有效的 HTML

善用專為建立表單而設計的元素和屬性:

  • <form>、<input>、<label>和<button>
  • type、autocomplete 和 inputmode

這些屬性可啟用內建瀏覽器功能、改善無障礙功能,並為標記增添意義。

使用 <label> 元素標示資料輸入表單欄位

如要為 <input>、<select> 或 <textarea> 加上標籤,請使用 <label>。將標籤的 for 屬性設為與輸入項目的 id 相同的值,即可將標籤與輸入項目建立關聯。

充分運用 HTML 屬性

使用適當的 <input> 元素 <type> 屬性,在行動裝置上提供正確的鍵盤,並啟用瀏覽器的基本內建驗證功能,讓使用者輕鬆輸入資料。

電子郵件地址一律使用 type="email",電話號碼則一律使用 type="tel"。

每個 <input>、<select> 和 <textarea> 元素都應有適當的 autocomplete 屬性,以提升無障礙程度,並協助使用者避免重新輸入資料。

使用者名稱和電子郵件輸入欄位應包含 ID,而非文字。請新增 spellcheck="false",以免瀏覽器將其重寫為與帳戶不符的內容。input type="email" 一律停用 autocorrect 和 autocapitalize,但非電子郵件使用者名稱必須使用這兩項。

讓按鈕發揮作用

按鈕請使用 <button>。您也可以使用 <input type="submit">,但請勿使用 div 或其他隨機元素做為按鈕。按鈕元素提供無障礙行為、內建表單提交功能,且可輕鬆設定樣式。

為每個表單提交按鈕提供說明其功能的值。使用清楚、可辨識的標籤。舉例來說,請使用「建立帳戶」或「註冊」,而非「繼續」或「提交」。

盡可能使用單一姓名輸入欄位

除非有充分理由需要分開儲存名字、姓氏、敬稱或其他姓名部分,否則請讓使用者在單一輸入欄位中輸入姓名。使用單一姓名輸入欄位可簡化表單、啟用剪下和貼上功能,並簡化自動填入功能。

允許國際名稱。驗證時,請避免使用僅比對拉丁字元的規則運算式。「僅限拉丁字母」會排除姓名或地址含有非拉丁字母字元的使用者。請改為允許 Unicode 字母比對,並確保後端安全支援 Unicode 做為輸入和輸出。新式瀏覽器對規則運算式中的 Unicode 支援良好。

顯示申請進度

在註冊流程的每個步驟中,使用網頁標題和描述性按鈕值,清楚說明目前需要執行的操作和下一個步驟。

在表單輸入內容中使用 enterkeyhint 屬性,設定行動鍵盤的 Enter 鍵標籤。舉例來說,在多頁表單中使用 enterkeyhint="previous" 和 enterkeyhint="next",在表單的最後一個輸入欄位中使用 enterkeyhint="done",在搜尋輸入欄位中使用 enterkeyhint="search"。

協助使用者避免重新輸入註冊資料

請務必在註冊表單中加入適當的 autocomplete 值。

這樣一來,瀏覽器就能安全地儲存註冊詳細資料,並正確輸入表單資料,為使用者提供協助。如果沒有自動填入功能,使用者可能會更傾向以實體方式記錄註冊詳細資料,或以不安全的方式將註冊資料儲存在裝置上。

仔細驗證

在使用者輸入資料時和提交表單前,驗證資料。請使用 type="email" 輸入電子郵件地址,瀏覽器會自動驗證格式。如果是密碼,請使用 pattern 屬性強制執行強度要求,並在驗證失敗時提供清楚的錯誤訊息。在必填欄位中加入 required 屬性,避免使用者提交空白內容。

將註冊功能放在專屬的 <form> 元素中

當您要求使用者輸入資料時,請一律使用 <form> 元素

請勿將輸入內容包裝在 <div> 中,並純粹使用 JavaScript 處理輸入資料提交。一般來說,最好使用 <form> 元素。這樣一來,螢幕閱讀器和其他輔助裝置就能存取您的網站,啟用一系列內建瀏覽器功能,讓您更輕鬆地為舊版瀏覽器建構基本功能註冊,即使 JavaScript 失敗,也能正常運作。

請勿重複輸入

有些網站會強制使用者輸入兩次電子郵件地址或密碼。這或許能減少少數使用者的錯誤,但會增加所有使用者的工作量,並提高放棄率。如果瀏覽器會自動填入電子郵件地址或建議高強度密碼,要求使用者輸入兩次也沒有意義。建議您讓使用者確認電子郵件地址 (無論如何都必須這麼做),並在必要時輕鬆重設密碼。

不公開密碼,但允許使用者查看

密碼輸入欄位應有 type="password",以隱藏密碼文字,並協助瀏覽器瞭解輸入內容是密碼。(請注意,瀏覽器會使用各種技術來瞭解輸入角色,並決定是否要提供儲存密碼的選項)。

建議您新增「顯示密碼」切換鈕,讓使用者檢查輸入的文字,也別忘了新增「忘記密碼」連結。

為行動裝置使用者提供合適的鍵盤

使用 <input type="email"> 為行動裝置使用者提供適當的鍵盤,並啟用瀏覽器的基本內建電子郵件地址驗證功能,完全不需要 JavaScript!

如需使用電話號碼而非電子郵件地址,<input type="tel"> 會在行動裝置上啟用電話撥號鍵盤。您也可以視需要使用 inputmode 屬性:inputmode="numeric" 適合用於 PIN 碼。

避免行動鍵盤遮住「註冊」按鈕

如果沒有留意,行動鍵盤可能會遮住表單,甚至遮住部分「註冊」按鈕。使用者可能還沒搞清楚狀況就放棄了。

請盡可能避免這種情況,在註冊頁面頂端只顯示電子郵件 (或電話) 和密碼輸入欄位,以及「註冊」按鈕。其他內容則放在下方。

協助使用者避免重新輸入資料

您可以協助瀏覽器正確儲存資料並自動填入輸入內容,這樣使用者就不必記住輸入電子郵件和密碼值。這點在行動裝置上尤其重要,對於電子郵件輸入欄位更是如此,因為這類欄位的放棄率很高。這項程序包括下列兩大部分:

  1. autocomplete、name、id 和 type 屬性可協助瀏覽器瞭解輸入內容的角色,以便儲存資料,供日後自動填入。如要允許儲存資料以供自動填入,新式瀏覽器也要求輸入內容必須具有穩定的 name 或 id 值 (而非在每次載入網頁或部署網站時隨機產生),且必須位於具有 submit 按鈕的 <form> 元素中。
  2. autocomplete 屬性可協助瀏覽器使用儲存的資料,正確自動填入輸入內容。

對於電子郵件輸入,請使用 autocomplete="username",因為新式瀏覽器中的密碼管理工具可辨識 username,即使您應該使用 type="email",且可能想使用 id="email" 和 name="email"。如果是密碼輸入欄位,請使用適當的 autocomplete 值,協助瀏覽器區分新密碼和現有密碼。

使用 autocomplete="new-password" 設定新密碼

強制:如果是註冊表單,請使用 autocomplete="new-password"。

<!-- new-password prevents password managers from auto-filling an existing password into this field -->
<input type="password" id="new-password" name="new-password" autocomplete="new-password" required>

允許瀏覽器建議高強度密碼

新式瀏覽器會使用經驗法則,決定何時顯示密碼管理工具 UI,並建議高強度密碼。

瀏覽器內建密碼產生器,使用者和開發人員不必費心思考什麼是「高強度密碼」。瀏覽器可以安全地儲存密碼,並在必要時自動填入,使用者不必記住或輸入密碼。鼓勵使用者利用瀏覽器內建的密碼產生器,也代表他們更有可能在您的網站上使用不重複的高強度密碼,且不太可能重複使用可能在其他地方遭盜用的密碼。

避免使用者不小心漏掉輸入內容

在電子郵件和密碼欄位中加入 required 屬性。新式瀏覽器會自動提示並聚焦於遺漏的資料。

允許貼上密碼

部分網站不允許在密碼輸入欄位貼上文字。

禁止貼上密碼會造成使用者困擾,導致他們使用容易記住的密碼 (因此可能更容易遭到破解),而且根據英國國家網路安全中心等機構的說法,這實際上可能會降低安全性。使用者只有在嘗試貼上密碼後,才會發現系統不允許貼上密碼,因此不允許貼上密碼並無法避免剪貼簿安全漏洞。

提供第三方登入

許多使用者偏好使用電子郵件地址和密碼註冊表單登入網站。不過,您也應該允許使用者透過第三方識別資訊提供者登入,也就是聯合登入。

這種做法有幾項優點。如果使用者透過聯合登入建立帳戶,您就不需要要求、傳送或儲存密碼。

您也可以透過聯合登入存取其他已驗證的個人資料資訊,例如電子郵件地址,這表示使用者不必輸入該資料,您也不必自行驗證。使用者取得新裝置時,聯合登入功能也能讓他們更輕鬆地登入。

謹慎處理使用者名稱

除非 (或直到) 需要使用者名稱,否則請勿要求使用者提供。使用者只需提供電子郵件地址 (或電話號碼) 和密碼,即可註冊及登入,也可以選擇使用聯合登入。請勿強迫他們選擇及記住使用者名稱。

如果網站確實需要使用者名稱,請勿對使用者名稱施加不合理的規則,也不要禁止使用者更新使用者名稱。請在後端為每個使用者帳戶產生專屬 ID,而非根據使用者名稱等個人資料產生 ID。

此外,請務必使用 autocomplete="username" 做為使用者名稱。

備用策略

自動填入功能是漸進增強功能。在不支援自動填入功能的瀏覽器中,使用者只需手動輸入註冊憑證即可。語意 HTML 限制 (例如 type、inputmode 和 required) 仍會正常運作,驗證使用者輸入內容並提供正確的虛擬鍵盤。