Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

关于表单验证的碎碎念

  在古代,表单验证全是后端来做的,后来人们为了降低服务器压力,为了提高用户体验(更快地验证),把部分验证在前端多做了一次。注意是多做一次,而不是由后端搬到前端了。后端永远需要做完整验证,否则前端被绕过就呵呵了。于是表单验证变得各种复杂。
  前后端都做表单验证造成的问题是前后端的验证不同步。有些数据可以通过前端验证,但是无法通过后端;有些数据不能通过前端验证,但绕过前端依然可以提交成功。这样的问题经常是由需求变更造成的,本来一个挺好的程序,当需求调整一条验证规则后,前后端程序可能有一边忘做了就会出问题。或者前后端都做了验证,但做法不同也会出问题。
  在前后端使用不同的编程语言时这个问题尤其突出,去除头尾空格就是一个典型的例子。PHP 内置的 trim 函数不会过滤全角空格,而 JavaScript 的会。 strlen(trim(' '))==0; // false " ".trim().length==0; // true   有些网站确实会防止用户注册时用户名中带空格,但是如果前后端都使用内置的 trim,只要绕过前端的验证,就可以让全角空格成功入库。这个例子暴露出了验证不一致带来的问题。
  我觉得对于前后端同时使用的验证规则,应该维护一套验证标准。可以借助第三方语言来精确描述验证规则,比如正则表达式。但正则表达式其实也存在差异,PHP 使用 Perl 风格的正则表达式,而 JavaScript 使用 ECMA 风格的,它们在语法上是有差异的,所以无法通用。
  我希望将验证规则以一种伪代码的形式描述,然后通过工具生成可用的程序代码供各种编程语言使用。我不知道现在是否已经有了类似的东西,但我可能打算造这个轮子了。或许会写一个 JS 正则转 PHP 正则的程序吧(PHP 正则无法转 JS 正则,因为存在一些 PHP 正则支持但 JS 正则不支持的特性)。或者如果现在真有可用的轮子,大家可以推荐下。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^