Javascript和Java进行相同的验证

Javascript and Java make same validation

本文关键字:验证 Java Javascript      更新时间:2023-09-26

这只是我想知道的事情,因为我已经来实施它了。

有没有办法在 Javascript 和 Java 中进行验证(密码/用户名规则),而不是在两端使用相同的正则表达式?

我可以使用正则表达式,但我宁愿使用更高级的东西。我记得使用JQuery做过一次,很快就会再看一遍。当然,如果我沿着这条路走下去,服务器端的验证将以不同的方式实现。只要服务器端的验证是正确的,这不是真正的问题,但很高兴知道我在两端都有完全相同的规则集。

有什么建议吗?


编辑:

我似乎记得Grails对验证有一些很好的支持。我没有使用Grails,但我使用的是Groovy。我可以使用一些依赖性来在Grails之外获得相同的东西吗?

如您所知,通常的方法是在服务器端"镜像"客户端验证,例如,客户端上的状态验证和模型中的不可为空字段。或者写在两端的相同正则表达式。实际上没有一个抽象来以您想要的方式在一个地方制定规则。

但是,我可以想到几个接近您想要的选项。

  • 在隐藏的输入字段中将正则表达式传递给客户端,只需编写 JavaScript 即可使用它来对用户名和密码字段执行模式匹配。
  • 使用较厚的框架,如JavaServer Faces。它生成 JavaScript 并仅在服务器端处理验证,但它是一个抽象,您只需编写一次代码。我没有数字支持这一点,但我感觉到技术多年来失去了很多动力。Grails和Play是同一想法的更现代和流行的例子。

希望有帮助。

最好使用 java 将所有验证规则放在服务器端。不要忘记,这可能会变得复杂,或者通常需要来自服务器端的数据,例如唯一的用户名。然后,你可以让你的js使用ajax调用服务器端的特定服务,这些服务对输入的任何内容调用验证规则,并在表单上输出任何通知。

如果您的验证规则像必填字段一样次要,那么只需将其放在 js 上,并在持久性层上具有不可为空的字段。

编辑 - 评论

此答案的目的是指示后端应存在验证,以始终确保处理的数据正确,无论是否在前端进行验证。在后端,可以访问前端不可用的数据,并且在一个地方也具有复杂性,这将处理数据(例如存储它)并可能重用逻辑(例如其他地方使用的 api 库)。

现在这一点也更加重要,因为通常后端位于提供API的完全独立的层/部署/微服务上。

在前端验证可以镜像,但通常我们只添加简单的验证。在前端验证的主要原因是保存网络调用和后端处理(例如,无需调用来检查密码长度或发送将失败的不良数据等)并提供更好的用户体验(例如,没有理由让用户填写具有 20 个字段的表单并等待来自服务器的长消息,每个字段都有错误等)。逻辑应该编写一次,并且能够在一个地方轻松更新。