ValidityState: patternMismatch 屬性

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

ValidityState 介面中只讀的 patternMismatch 屬性指示使用者編輯後的 <input> 元素的值是否不符合元素 pattern 屬性設定的約束。

僅當以下條件全部為真時,patternMismatch 屬性才為 true:

一個布林值,如果 ValidityState 物件不符合約束,則為 true

示例

給定以下內容

html
<p>
  <label
    >Enter your phone number in the format (123)456-7890 (<input
      name="tel1"
      type="tel"
      pattern="[0-9]{3}"
      placeholder="###"
      aria-label="3-digit area code"
      size="2" />)-
    <input
      name="tel2"
      type="tel"
      pattern="[0-9]{3}"
      placeholder="###"
      aria-label="3-digit prefix"
      size="2" />
    -
    <input
      name="tel3"
      type="tel"
      pattern="[0-9]{4}"
      placeholder="####"
      aria-label="4-digit number"
      size="3" />
  </label>
</p>

在這裡,我們為北美電話號碼設定了 3 個部分,併為所有三個電話號碼元件設定了一個隱式標籤,分別期望 3 位、3 位和 4 位數字,如每個部分上設定的 pattern 屬性所定義。

如果值太長或太短,或者包含非數字字元,patternMismatch 將為 true。當為 true 時,該元素將匹配 :invalid CSS 偽類。

css
input:invalid {
  border: red solid 3px;
}

請注意,在這種情況下,如果值太長或太短,我們會得到一個 patternMismatch,而不是 validityState.tooLongvalidityState.tooShort,因為是 pattern 決定了值的長度。如果我們改用 minlengthmaxlength 屬性,我們可能會看到 validityState.tooLongvalidityState.tooShort 為 true。

注意: email 輸入型別至少需要匹配 x@y,而 url 型別至少需要匹配 x:,且沒有 pattern 屬性。當無效時,如果不存在 pattern 屬性(或 pattern 屬性對於該輸入型別無效),則 validityState.typeMismatch 將為 true。

規範

規範
HTML
# dom-validitystate-patternmismatch

瀏覽器相容性

另見