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

浏览器兼容性

另见