具有HTML5`pattern`属性的`.checkValidity()`始终返回true

时间:2018-07-05 09:53:02

标签: javascript html html5 validation

我正在使用以下代码段检查此输入的有效性,以确保其不包含任何逗号:

var valid_part = document.getElementById("part");

if (valid_part.checkValidity()) {
  alert("Item Description contains no commas ");
}
else {
  alert("Item Description cannot contain a comma");
}
<input pattern="[^,]" type="text" id="part">

但是,无论输入值是什么,valid_part.checkValidity()始终返回true。

我已经在Chromium和Firefox在Debian上以及Chrome和Firefox在Android上进行了尝试,结果始终是相同的。

该功能有效吗?如果没有,我是否应该使用其他方法检查输入中的逗号?

1 个答案:

答案 0 :(得分:3)

来自MDN documentation for <input>(重点是我):

  

14/06/2017 - 6.5 hours 15/06/2017 - 5.5 hours 18/01/2018 - 4.5 hours 26/02/2018 - 0.05 hours 27/02/2018 - 11.58 hours :检查控件值的正则表达式。 该模式必须与整个值匹配。

因此,pattern的意思是“该字符串包含个完全不是字符的字符”。因此,您的验证检查实际上应仅针对[^,]以外的单个字符返回true。它还为空字符串返回,,但对于所有其他字符串实际上返回true

您要false的意思是“该字符串包含任意数量的字符(包括无逗号)”。

此外,您提供的代码尚不清楚,但是请确保该代码位于您需要验证时可以运行的函数中。示例片段:

[^,]*
document.getElementById("checker").addEventListener("click", function() {
  var valid_part = document.getElementById("part");

  if (valid_part.checkValidity()) {
    alert("Item Description contains no commas ");
  }
  else {
    alert("Item Description cannot contain a comma");
  }
});