我们刚刚完成了 Chris Ferdinandi 关于现代表单验证的一系列精彩文章。它 从这里开始。如今,浏览器内置了许多处理表单验证的工具,包括可以独立完成大量工作的 HTML 属性,以及可以执行更多操作的 JavaScript API。Chris 甚至向我们展示了通过 稍微多一点的工作,我们可以将 IE 9 的支持降至最低,并获得理想的用户体验。
那么第三方表单验证库有什么作用呢?为什么你需要为免费的东西使用库呢?
你需要更广泛的浏览器支持。
所有“现代”浏览器 + IE 9 及以下版本都非常好,尤其是在您很好地解决了跨浏览器差异的情况下 就像 Chris 所做的那样。但是,您可能需要更深入地支持。
像 Parsley 这样的库可以进一步降低到 IE 8。
您正在使用一个不希望您手动操作 DOM 的 JavaScript 框架。
当您使用 React 等框架时,您实际上根本不会手动附加事件处理程序或将任何内容插入 DOM。您可能正在通过 props
将值传递给表单元素,并在 state
中设置错误数据。
您可以使用原生表单验证和原生约束验证来完成所有这些操作,但这也解释了为什么您可能需要使用为此设计的附加组件。您可能会使用像 react-validation 这样的包来帮助您解决这个问题。或者 Formik,它似乎就是为这类事情而构建的。

同样,还有
- angular-form-validation 或 angular-validation 用于 Angular
- ember-form-validation 用于 Ember
- vee-validate 用于 Vue
希望这些库都很轻量级,因为它们可以在可能的情况下利用原生 API。当您需要使用这类工具时,我会留给您去研究。
您被 API 所吸引。
任何框架获得成功的主要原因之一就是 API 的友好性。如果它使您的代码易于理解和使用,那就非常重要。
有时最好的 JavaScript API 从用于激活和配置的 HTML 属性开始。请记住,原生 HTML 约束验证 完全是关于 HTML 属性 控制表单验证的,因此理想情况下,任何第三方表单验证库都应本着渐进增强精神使用它们。
您被集成所吸引。
他们承诺您“与 Bootstrap 兼容!”,而您的项目正在使用 Bootstrap,因此这似乎是一个不错的选择。我明白,但这是我最不喜欢的理由。在这种情况下,Bootstrap 唯一关心的就是一些类名以及您放置 div 的位置。
它验证的内容超出了浏览器的范围。
浏览器可以验证电子邮件地址是否在技术上有效,但不能验证它是否可以弹回。浏览器可以验证邮政编码是否看起来像真实的邮政编码,但不能验证它是否实际存在。浏览器可以验证 URL 是否为正确的 URL,但不能验证它是否可以解析。第三方库可能可以执行此类操作。
您被花哨的功能所吸引。
- 也许该库提供了一个功能,当出现错误时,它会将表单滚动到第一个错误。
- 也许该库提供了一个验证码功能,这是一个与表单验证相关的概念,并且您需要它。
- 也许该库提供了一个您喜欢的事件系统。它在表单上发生某些事情时发布事件,这对您很有用。
- 也许该库不仅验证表单,还创建所有错误的摘要以显示给用户。
这些内容略高于简单的表单验证。您可以使用原生验证来完成所有这些操作,但我可以理解这将如何推动第三方库的采用。
你需要翻译。
原生浏览器验证消息(与 HTML 属性一起提供的默认消息)使用浏览器本身的语言。因此,Firefox 的法语版本会输出法语消息,而不管页面本身的语言如何。

第三方表单验证库可以附带语言包来解决此问题。FormValidation 就是一个例子。

结论
我并不推荐使用表单验证库。事实上,如果有什么不同的话,那就是相反的。
我认为,随着浏览器支持和原生 API 的用户体验越来越好,第三方表单验证库将会逐渐减少。
或者(我想很多库已经这样做了),它们会在内部越来越多地使用原生 API,然后在验证本身之上提供不错的功能。
我曾在 Mozilla Firefox 中使用标准的 HTML 表单验证,效果非常好。当我尝试在 Safari 中使用它时,它完全忽略了所有验证,这非常令人恼火。
但是我没有使用第三方插件。我当时已经在使用 jQuery,所以我编写了自己的验证器插件,效果非常好。
有时我编写自己的插件,因为如果我以后需要修改它,我知道它是如何工作的。当您使用其他人的插件并需要添加功能时,会困难得多。
本文似乎对第三方验证和服务器端验证,尤其是在验证电子邮件/URL 有效性方面存在一些混淆。当然,您可以使用第三方验证,但总是在某个地方进行服务器端验证。
这篇文章有很多内容感觉像是强推所有操作都在客户端完成,并且依赖第三方来做一些你可能需要服务器才能完成的事情。这种强推只会导致更少的开发者了解服务器端技术,这并不是一个很好的发展方向。
HTML5 验证允许无效的邮件地址,例如没有正确域名后缀的 invalid@email。
仅此一点就足以证明第三方验证的必要性。
例如,在这个评论表单中,您使用了默认的必填字段验证,但依赖于服务器端工具来进行正确的邮件地址验证。