Javascript HTML表单需求规范

Javascript HTML表单需求规范,javascript,html,ruby-on-rails,json,forms,Javascript,Html,Ruby On Rails,Json,Forms,我正在构建一个框架,该框架将基于json编写的表单需求规范验证客户端(javascript)和服务器端表单 目的是消除服务器和客户机上逻辑上等价的代码,使代码更易于维护,编写速度更快,错误更少 规范格式可能类似于: { '<field_name>' : ['<validation_function>', 'req', ['<requirement>', <param>], ...], ... } (对需求列表进行排

我正在构建一个框架,该框架将基于json编写的表单需求规范验证客户端(javascript)和服务器端表单

目的是消除服务器和客户机上逻辑上等价的代码,使代码更易于维护,编写速度更快,错误更少

规范格式可能类似于:

{ '<field_name>' : ['<validation_function>', 'req', ['<requirement>', <param>], ...], ... }
(对需求列表进行排序,以便用户可以首先获得最基本的错误消息,“req”需求必须首先出现(如果存在),这意味着该字段是必需的)

e、 g.)


有人知道类似的技术吗?我认为Rails验证框架在错误的层次上解决了这个问题,因为我发现表单通常在多个模型上运行

我知道Django也有一个验证框架。但它也发生在后端


但是,如果后端是唯一可以知道输入的数据是否有效的地方,该怎么办?例如,此验证系统的用户可能希望确保电子邮件地址没有被其他帐户使用。那么这种检查就不能在客户端进行。

我知道Django也有一个验证框架。但它也发生在后端


但是,如果后端是唯一可以知道输入的数据是否有效的地方,该怎么办?例如,此验证系统的用户可能希望确保电子邮件地址没有被其他帐户使用。那么这种检查就不能在客户端进行。

您是否考虑过通过XMLHttpRequest重用后端验证,并将任何错误详细信息返回为JSON,以便轻松更新表单以显示错误?Simon Willison在他的高级Django演示文稿(来自幻灯片56)中使用了Django出色的
Django.forms
模块


虽然这很好,但我还是想抓住你的问题的症结所在,这就是我为什么要开始的原因,虽然已经很长时间了,但还远没有达到预期的目的,它使用相同的核心代码库,使用相同的表单对象定义在前端和后端运行适当的验证。

您是否考虑过通过XMLHttpRequest重用后端验证,并将任何错误详细信息返回为JSON,以便轻松更新表单以显示错误?Simon Willison在他的高级Django演示文稿(来自幻灯片56)中使用了Django出色的
Django.forms
模块


虽然这很好,但我也想抓住这个问题的症结所在,这就是我为什么要开始的原因。这个问题已经很长时间了,但还远没有达到预期的目的,即使用相同的核心代码库,使用相同的表单对象定义在前端和后端运行适当的验证。

但是。。。以前在rails中有过嵌套模型/表单的方法,在v2.3中它得到了一些很好的支持,不是吗


当然,并不是每个人都使用rails:)

但是。。。以前在rails中有过嵌套模型/表单的方法,在v2.3中它得到了一些很好的支持,不是吗


当然,并不是每个人都使用rails:)

嵌套对象表单的改进看起来很有趣。谢谢你的链接。然而,我仍然不知道如何使用Rails验证框架为多页表单创建需求。我如何让Rails验证框架生成与jquery兼容的javascript验证?嵌套对象表单的改进看起来很有趣。谢谢你的链接。然而,我仍然不知道如何使用Rails验证框架为多页表单创建需求。我如何让Rails验证框架生成与jquery兼容的javascript验证?是的,一些检查只能在服务器端完成。但是,我只是想通过客户端和服务器端都应该进行的验证来解决这个问题。只有服务器端的检查没有代码重复。这是一个非常好的主意。对于你的问题,我不能给你一个好的答案,只能说你的想法是好的!是,某些检查只能在服务器端进行。但是,我只是想通过客户端和服务器端都应该进行的验证来解决这个问题。只有服务器端的检查没有代码重复。这是一个非常好的主意。对于你的问题,我不能给你一个好的答案,只能说你的想法是好的!对于大多数验证目的来说,向服务器发送ajax验证请求既慢又浪费。感谢您链接到您的项目和django.forms api。这看起来很有趣。对于大多数验证目的来说,向服务器发送ajax验证请求既慢又浪费。感谢您链接到您的项目和django.forms api。看起来很有趣。
{
    'name' : ['string', 'req', ['min',6], ['max',150], ['match', /^[\sa-z0-9ÅÄÖåäö&]$/i], ['not_match', /^tmp_/]],
    'email' : ['email', 'req'],
    'email_confirm' : ['same_as', 'email'],
    'password' : ['string', 'req', ['min', 6], ['max', 64], ['match', /^[a-z0-9\!@#\$%^&*_+.]$/i] ],
}