Viv*_*ath 14 javascript validation client-side-validation
我不确定我是否可以提出这样的问题,但在Meta Stackoverflow上看到这个后,看起来这种问题还可以.那么,关于我的问题:
几个月前,我在Javascript中编写了一个验证框架.我知道已存在jQuery Validation之类的验证框架,但我想采用不同的验证方法.当前的方法涉及编写Javascript代码以对表单元素执行验证.通过查看表单源代码,不会立即明确在每个元素上进行验证.在某种程度上,这可以通过使用指定不同类型的验证的CSS类来解决.但我觉得即使这样也是有限的,因为你无法轻松定制验证的行为(错误消息等).我想使用JSR-303 Bean Validation或Hibernate Validator在Java中执行基于注释的验证.
由于HTML5允许您向元素添加自定义属性,我认为我可以利用它来"注释"表单元素以进行验证.所以,基本上,我想出了这个:
<input id = "myInput"
name = "myInput"
type = "text"
class = "regula-validation"
data-constraints = '@NotEmpty @IsNumeric @Between(min=1, max=5)' />
Run Code Online (Sandbox Code Playgroud)
考虑到这个基本思想,我创建了一个Javascript框架:
此外,该框架还具有以下功能:
一旦我创建了我的框架,我就试图获得反馈并对其进行审核,但我不知道该去哪里获得反馈和评论.我写了一些关于它的博客文章并将其发布到Digg和Reddit(编程部分),但没有太多运气.一些人似乎很感兴趣,但我没有得到更多.
Recently, at my workplace we've been modernizing a legacy codebase (JSP and servlets) and moving it into Spring MVC. When the conversation of validation came up, I pitched my framework to my senior architect. I did a little integration and proof of concept and they seemed interested and gave me the go-ahead to add it to the project. Till now, I only had my own humble opinion that this would be a helpful way to do validation, so this gave me some confidence that my idea and framework might have some merit. However, I still needed some more participation and framework. After I figured out that Stackoverflow does allow these kinds of questions, I decided to post it on here to get some constructive criticism, comments, and feedback.
所以我没有任何延迟,我想介绍Regula.我提供的链接转到GitHub上的wiki,其中包含该框架的所有文档.您可以从此处下载最新版本(v1.1.0).
期待您的评论.
一些不直接相关的额外信息
我曾经想过将我的框架与Spring集成,即将bean上的验证注释转换为客户端验证.最近我能够使这个工作,即使有验证组(虽然目前没有支持客户端组之间的继承关系).这样,您只需使用验证约束来注释字段属性,并自动生成客户端验证代码.但是,我是一个春天的新手,所以我的方法可能不那么干净.我想得到一些反馈,所以如果有人有兴趣请告诉我.理想情况下(我希望我不会过于自命不凡)我想联系春天的人,看看他们是否对此感兴趣.
我已经非常喜欢它,它保持我的html清洁,并且构建自定义验证器的能力很棒.我添加的一件事是绑定验证和提交函数的简写,并将其包装为jQuery插件:
if (jQuery) {
(function($)
{
$.regula = function(formId, callback)
{
regula.bind();
$("#" + formId).submit(function()
{
var validationResults = regula.validate();
if (validationResults.length > 0)
{
if (callback)
callback(validationResults);
return false;
}
return true;
});
};
})(jQuery);
}
Run Code Online (Sandbox Code Playgroud)
事实上,我刚刚写了一篇关于它的博客,因为我对它的清洁和简单印象深刻.我仍然会花时间浏览你的资源,看看你是如何完成它的,但它是一个很好的开始:)
关于集成框架,我主要使用ASP.NET MVC,看看它如何将服务器端验证逻辑转换为客户端约束将会很有趣.我可能会在接下来的一个月左右看一些东西.