<input type="password">

型別為password<input>元素提供了一種使用者安全輸入密碼的方式。

該元素以單行純文字編輯器控制元件的形式呈現,其中文字被遮蔽,因此無法讀取,通常用星號(“*”)或點(“•”)等符號替換每個字元。此字元將根據使用者代理和作業系統而有所不同。

試一試

輸入過程的確切行為可能因瀏覽器而異。有些瀏覽器會在遮蔽之前短暫顯示鍵入的字元,而其他瀏覽器則允許使用者切換顯示純文字。這兩種方法都有助於使用者檢查他們是否輸入了預期的密碼,這在移動裝置上尤其困難。

注意:任何涉及敏感資訊(如密碼)的表單(如登入表單)都應透過 HTTPS 傳輸。現在,許多瀏覽器都實現了機制來警告不安全的登入表單;請參閱不安全的密碼.

value 屬性包含一個字串,該字串的值是用於輸入密碼的文字編輯控制元件的當前內容。 如果使用者尚未輸入任何內容,則該值為空字串 ("")。 如果指定了 required 屬性,則密碼編輯框必須包含非空字串的值才能有效。

如果指定了 pattern 屬性,則只有當值透過驗證時,password 控制元件的內容才被視為有效;有關更多資訊,請參閱 驗證

注意: 換行符 (U+000A) 和回車符 (U+000D) 字元在 password 值中不允許使用。 設定密碼控制元件的值時,換行符和回車符字元將從該值中刪除。

其他屬性

除了對所有 input 元素(無論其型別如何)起作用的屬性外,密碼欄位輸入還支援以下屬性。

maxlength

使用者可以在密碼欄位中輸入的最大字串長度(以 UTF-16 程式碼單元為單位)。 這必須是 0 或更高的整數值。 如果沒有指定 maxlength 或指定了無效值,則密碼欄位沒有最大長度。 此值還必須大於或等於 minlength 的值。

如果輸入的文字長度大於 maxlength UTF-16 程式碼單元,則輸入將無法透過 約束驗證。 約束驗證僅在使用者更改值時應用。

minlength

使用者可以在密碼輸入欄位中輸入的最小字串長度(以 UTF-16 程式碼單元為單位)。 這必須是非負整數值,小於或等於 maxlength 指定的值。 如果沒有指定 minlength 或指定了無效值,則密碼輸入沒有最小長度。

如果輸入的文字長度小於 minlength UTF-16 程式碼單元,則輸入將無法透過 約束驗證。 約束驗證僅在使用者更改值時應用。

pattern

pattern 屬性(如果指定)是一個正則表示式,輸入的 value 必須與該正則表示式匹配,才能透過 約束驗證。 它必須是有效的 JavaScript 正則表示式,與 RegExp 型別使用的方式相同,並且如我們的 正則表示式指南 中所述;'u' 標誌在編譯正則表示式時指定,以便將模式視為 Unicode 程式碼點的序列,而不是作為 ASCII。 模式文本週圍不應指定正斜槓。

如果未指定或指定了無效的模式,則不會應用任何正則表示式,並且完全忽略此屬性。

注意: 使用 title 屬性指定大多數瀏覽器將顯示為工具提示的文字,以解釋匹配模式的要求。 您還應在附近包含其他說明性文字。

強烈建議在密碼輸入中使用模式,以幫助確保您的使用者選擇並使用包含各種字元類的有效密碼。 使用模式,您可以強制執行大小寫規則,要求使用一定數量的數字和/或標點符號等等。 有關詳細資訊和示例,請參閱 驗證 部分。

placeholder

placeholder 屬性是一個字串,它向用戶簡要提示該欄位中需要什麼型別的資訊。 它應該是一個詞語或短語,演示預期的資料型別,而不是說明性訊息。 文字不得包含回車符或換行符。

如果控制元件的內容具有單向性 (LTRRTL),但需要以相反的方向性顯示佔位符,您可以使用 Unicode 雙向演算法格式化字元來覆蓋佔位符內的方向性;有關更多資訊,請參閱 如何使用 Unicode 控制元件進行雙向文字

注意: 儘可能避免使用 placeholder 屬性。 它在語義上不如其他解釋表單的方式有用,並且會導致內容出現意外的技術問題。 有關更多資訊,請參閱 input 標籤。

readonly

布林屬性,如果存在,表示此欄位不能由使用者編輯。 但是,它的 value 仍然可以透過直接設定 HTMLInputElement.value 屬性值的 JavaScript 程式碼更改。

注意: 由於只讀欄位不能具有值,因此 required 對也指定了 readonly 屬性的輸入沒有任何影響。

size

size 屬性是一個數值,指示輸入欄位的寬度應為多少個字元。 該值必須大於零,預設值為 20。 由於字元寬度不同,因此這可能並非完全準確,也不應依賴於此;生成的輸入可能比指定的字元數更窄或更寬,具體取決於字元和字型 (font 設定)。

不會設定對使用者可以在欄位中輸入的字元數的限制。 它只指定大約有多少個字元可以一次看到。 要設定輸入資料長度的上限,請使用 maxlength 屬性。

使用密碼輸入

密碼輸入框通常與其他文字輸入框的工作方式相同;主要區別在於內容被隱藏,以防止靠近使用者的人看到密碼。

一個簡單的密碼輸入

這裡我們看到了最基本的密碼輸入,使用 label 元素建立標籤。

html
<label for="userPassword">Password: </label>
<input id="userPassword" type="password" />

允許自動填充

要允許使用者的密碼管理器自動輸入密碼,請指定 autocomplete 屬性。 對於密碼,這通常應該是以下之一

on

允許瀏覽器或密碼管理器自動填寫密碼欄位。 這不如使用 current-passwordnew-password 更有資訊量。

off

不允許瀏覽器或密碼管理器自動填寫密碼欄位。 請注意,某些軟體會忽略此值,因為它通常對使用者維護安全密碼實踐的能力有害。

current-password

允許瀏覽器或密碼管理器輸入網站的當前密碼。 這比 on 提供了更多資訊,因為它允許瀏覽器或密碼管理器自動將當前已知的網站密碼輸入到該欄位,但不會建議新的密碼。

new-password

允許瀏覽器或密碼管理器自動輸入網站的新密碼;這在“更改您的密碼”和“新使用者”表單上使用,在要求使用者輸入新密碼的欄位中使用。 新密碼可以透過多種方式生成,具體取決於所使用的密碼管理器。 它可能會填寫一個新的建議密碼,或者它可能會向用戶顯示一個建立密碼的介面。

html
<label for="userPassword">Password:</label>
<input id="userPassword" type="password" autocomplete="current-password" />

使密碼成為必填項

要告訴使用者的瀏覽器,在提交表單之前密碼欄位必須具有有效的值,請指定布林 required 屬性。

html
<label for="userPassword">Password: </label>
<input id="userPassword" type="password" required />
<input type="submit" value="Submit" />

指定輸入模式

如果您的推薦(或必需)密碼語法規則將從標準鍵盤之外的替代文字輸入介面中受益,您可以使用 inputmode 屬性來請求特定介面。 此功能最明顯的用例是如果密碼需要是數字(例如 PIN)。 例如,帶有虛擬鍵盤的移動裝置可能會選擇切換到數字鍵盤佈局而不是完整鍵盤,以使輸入密碼更容易。 如果 PIN 是一次性使用,請將 autocomplete 屬性設定為 offone-time-code 以建議不要儲存它。

html
<label for="pin">PIN: </label>
<input id="pin" type="password" inputmode="numeric" />

設定長度要求

與往常一樣,您可以使用 minlengthmaxlength 屬性來建立密碼的最小和最大可接受長度。 此示例擴充套件了上一個示例,指定使用者的 PIN 必須至少為四位數字,最多為八位數字。 size 屬性用於確保密碼輸入控制元件的寬度為八個字元。

html
<label for="pin">PIN:</label>
<input
  id="pin"
  type="password"
  inputmode="numeric"
  minlength="4"
  maxlength="8"
  size="8" />

選擇文字

與其他文字輸入控制元件一樣,您可以使用 select() 方法來選擇密碼欄位中的所有文字。

HTML

html
<label for="userPassword">Password: </label>
<input id="userPassword" type="password" size="12" />
<button id="selectAll">Select All</button>

JavaScript

js
document.getElementById("selectAll").onclick = () => {
  document.getElementById("userPassword").select();
};

結果

您還可以使用 selectionStartselectionEnd 來獲取(或設定)控制元件中當前選定的字元範圍,以及 selectionDirection 來了解選擇發生的方向(或將要擴充套件的方向,具體取決於您的平臺;有關解釋,請參閱其文件)。 但是,鑑於文字被隱藏,因此這些功能的實用性有限。

驗證

如果您的應用程式對輸入密碼的實際內容有字元集限制或任何其他要求,您可以使用 pattern 屬性來建立一個正則表示式,用於自動確保您的密碼符合這些要求。

在此示例中,只有包含至少四個且不超過八個十六進位制數字的值才是有效的。

html
<label for="hexId">Hex ID: </label>
<input
  id="hexId"
  type="password"
  pattern="[0-9a-fA-F]{4,8}"
  title="Enter an ID consisting of 4-8 hexadecimal digits"
  autocomplete="new-password" />

示例

請求社會安全號碼

此示例僅接受與 有效的美國社會安全號碼 格式匹配的輸入。 這些號碼在美國用於稅收和身份識別,格式為“123-45-6789”。 每組中允許的值也存在各種規則。

HTML

html
<label for="ssn">SSN:</label>
<input
  type="password"
  id="ssn"
  inputmode="numeric"
  minlength="9"
  maxlength="12"
  pattern="(?!000)([0-6]\d{2}|7([0-6]\d|7[012]))([ -])?(?!00)\d\d\3(?!0000)\d{4}"
  required
  autocomplete="off" />
<br />
<label for="ssn">Value:</label>
<span id="current"></span>

這使用了一個 pattern,它將輸入的值限制為表示合法社會安全號碼的字串。 顯然,此正則表示式不能保證 SSN 有效(因為我們無權訪問社會安全管理局的資料庫),但它確實確保該號碼可能有效;它通常會避免無法有效的價值觀。 此外,它允許三組數字由空格、連字元 (“-”) 或無分隔符分隔。

inputmode 設定為 numeric 以鼓勵帶有虛擬鍵盤的裝置切換到數字鍵盤佈局,以便更容易輸入。 minlengthmaxlength 屬性分別設定為 9 和 12,要求該值至少為 9 個字元,最多為 12 個字元(前者不帶數字組之間的分隔符,後者帶分隔符)。 required 屬性用於指示此控制元件必須具有值。 最後,autocomplete 設定為 off 以避免密碼管理器和會話恢復功能嘗試設定其值,因為這根本不是密碼。

JavaScript

這只是一些簡單的程式碼,用於在螢幕上顯示輸入的 SSN,以便您可以看到它。 顯然,這會破壞密碼欄位的目的,但它有助於嘗試 pattern

js
const ssn = document.getElementById("ssn");
const current = document.getElementById("current");

ssn.oninput = (event) => {
  current.textContent = ssn.value;
};

結果

技術摘要

表示密碼的字串或空字串
事件 changeinput
支援的通用屬性 autocompleteinputmodemaxlengthminlengthpatternplaceholderreadonlyrequiredsize
IDL 屬性 selectionStartselectionEndselectionDirectionvalue
DOM 介面

HTMLInputElement

方法 select()setRangeText()setSelectionRange()
隱式 ARIA 角色 無對應角色

規範

規範
HTML 標準
# password-state-(type=password)

瀏覽器相容性

BCD 表格僅在瀏覽器中載入

另請參閱