【问题标题】:Javascript and Java make same validationJavascript 和 Java 进行相同的验证
【发布时间】:2013-10-26 15:47:50
【问题描述】:

这只是我想知道的事情,现在我已经开始实施它了。

除了在双方都使用相同的正则表达式之外,还有其他方法可以使 Javascript 和 Java 中的验证(密码/用户名规则)等效吗?

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

有什么建议吗?


编辑:

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

【问题讨论】:

  • 验证需要后端进程。你想在没有任何后端服务器端代码的情况下实现用户名和密码的验证吗?
  • 不,显然后端验证优先。我只是想知道是否有人知道使用比正则表达式更容易使用的东西在两端获得相同规则的方法。正则表达式是可行的,但我能说什么,我很懒:P

标签: java javascript regex validation grails


【解决方案1】:

如您所知,通常的做法是在服务器端“镜像”客户端验证——例如,客户端上的存在验证和模型中的不可为空的字段。或者两端都写同一个正则表达式。没有真正的抽象可以按照您想要的方式在一个地方制定规则。

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

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

希望对您有所帮助。

【讨论】:

  • +1 用于将正则表达式传递给 Javascript ......我想如果我沿着这条路走下去,我会硬编码。不过,我想我会尝试在前端使用一些可用的工具,然后在服务器端进行相同或更多的验证。
  • 我曾经使用 jQuery 一段时间(比如 2 年前)来做这种事情,我记得不必使用正则表达式。这就是我所指的。不过,我仍然需要对此进行调查,因为我已经忘记了我到底做了什么。
【解决方案2】:

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

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

编辑 - 评论

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

这在如今也更加相关,通常后端位于提供 API 的完全独立的层/部署/微服务上。

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

【讨论】:

  • 将所有验证规则放在服务器端真的是最佳实践吗?如果可能的话,我想避免不必要的请求,所以我不认为在前端进行验证是一个坏主意。当然,这并不能替代后端验证。
  • @justin 我会说这种情况下的最佳实践是在客户端和服务器中都进行验证。客户端是因为用户可以更快地获得反馈,而服务器是因为用户可以在浏览器中禁用 JavaScript。但是说某事是“最佳实践”只是一种意见。
  • 好的,谢谢塞尔吉奥。我以“以防万一”的心态问了这个问题。就像,我猜“不 - 只需在两端进行验证并确保你符合相同的规则”就是答案”。
  • 如果您将所有验证都放在后端,那么您会对后端的 AJAX 请求施加很大压力,以验证用户输入,这对用户不友好,因为用户等待响应的性能会受到影响后端要满足他们已经输入了一个有效的输入。复制其他人所说的前端和后端应该反映基本验证,后端是任何最终应该被拒绝并设法绕过初始客户端验证的所有场景。
  • @bmjrowe 已经很长时间了,可能应该编辑这个答案以使其更加精确和清晰。我同意,这主要是意图。
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多