JavaScript + 正则式实现表单参数校验
本文使用的JavaScript多语言实现,请参考:http://dcao.iteye.comhttps://blog.csdn.net/blog/513944
总体效果如下图:
Step 1 指定输入框的类型和输入的范围。
字符串通过realType指定类型为字符串、option表示是否可选、minlength最小长度为2和 maxlength指定最大长度为20。
<input name="user" id="user" type="text" realType="string" option="true" minlength="2" maxlength="20" >
数字通过realType指定类型为整型、min指定最小值为80、最大值为65535。
<input name="port" id="port" type="text" realType="int" min="80" max="65535" maxlength="5" >
IP地址只要指定类型为ip就可以。
<input name="ip" id="ip" type="text" maxlength="15" realType="ip">
等等类型...
Step 2 为每个类型写检查函数。
字符串的检查函数
function checkString(input) { if (undefined == input) { return true; } // 检查是否可选,默认可选,可选且内容为空就通过检查 if (input.option!=undefined && input.option=="true" && (input.value=="")) { return true; } // 必选不能为空 if (input.value=="" ) { return false; } // 检查最小长度 var minlen = parseInt(input.minLen, 10); if((! isNaN(minlen)) && input.value.length < minlen ) { return false; } // 检查最大长度 var maxlen= parseInt(input.maxLen, 10); if((! isNaN(maxlen) )&& input.value.length > maxlen) { return false; } return true; }
数字检查函数
function checkInt(input) { // 检查是否可选,默认可选,可选且内容为空就通过检查 if (input.option!=undefined && input.option=="true" && (input.value=="")) { return true; } // 必选不能为空 if (input.value=="" ) { return false; } // 和数字正则式比较 var intReg = /^-?\d+$/; if(!input.value.match(intReg)) { return false; } var value = parseInt(input.value, 10); if(isNaN(value)) { return false; } // 检查最小值 var min = parseInt(input.min, 10); if((! isNaN(min)) && value < min ) { return false; } // 检查最大值 var max= parseInt(input.max, 10); if((! isNaN(max)) && value > max) { return false; } return true; }
检查IP地址、email等的检查函数和上面的差不多,主要是采用正则式进行判断。
等等类型的检查函数...
Step 3 出错时增加错误提示
上面的检查函数都是返回true和false,还需要将错误信息提示给用户。
给用户提示的方式有 Alert对话框、控件边上显示错误信息、冒泡提示等。为了支持多种形式错误提示的切换,提示信息的实现通过将提示函数作为参数传入检查函数实现。
function checkString(input, errorFunction) { ... // 必选不能为空 if (input.value=="" ) { errorFunction(can_not_empty); return false; } ... // 检查最大长度 var maxlen= parseInt(input.maxLen, 10); if((! isNaN(maxlen) )&& input.value.length > maxlen) { errorFunction(str_too_long.fillArgs(input.maxlength)); return false; } //从错误改到正确的时候错误提示要清除掉 errorFunction(); return true; }
弹出错误对话框的函数
function alertError(input, msg) { if (msg == undefined) { return true; } alert(msg); input.focus(); input.select(); return false; }
function checkString(input, alertError) 效果如下图:
将错误显示到特定错误标签上的函数
function spanError(input, msg) { var name = "error" + input.id; var span = document.getElementById(name); if (span == undefined) { name = "error" + input.name; span = document.getElementById(name); if (span == undefined) { // 异常分支 alert("Need span:" + name); return false; } } if (msg== undefined) { span.innerHTML = "<img src='images/right.gif'/> " } else { span.innerHTML = "<img src='images/error.gif'/> " + msg; } return false; }
要求没有控件有对应的错误标签
<input name="ip" id="ip" type="text" maxlength="15" realType="ip"> <Span ID=erroruser></Span>
function checkString(input, spanError) 效果如下图:
Step 4 什么时候检查?
先写个帮助函数,作为所有类型控件的检查入口。
function checkInput(node, errorFunction) { if (node.realType == undefined) { return true; } if (errorFunction == undefined) { errorFunction = spanError; } var thisInputRight = true; switch (node.realType) { case "int" : if (!checkInt(node, errorFunction)) { false; } break; case "string" : if (!checkString(node, errorFunction)) { return false; }; break; case "ip" : if (!checkIp(node, errorFunction)) { return false; }; break; // ..... default : alert("can't find realType: "+node.realType); return false; break; } }
控件失去焦点的是时候进行检查。
<input name="user" id="user" type="text" realType="string" option="true" minlength="2" maxlength="20" onblur="checkInput(this)" >
表单提交的是很进行检查, 如果检查不通过就终止提交表单。
function checkForm(form, errorFunction) { if (errorFunction == undefined) { errorFunction = spanError; } var nodes = form.all; var allRight = true; var firstErrorInput = undefined; for (var i=0;i<nodes.length;i++) { var node = nodes[i]; if (node.realType == undefined) { continue; } if (!checkInput(node)) { allRight = false; if (firstErrorInput == undefined) { firstErrorInput = node; firstErrorInput.focus(); firstErrorInput.select(); } } } return allRight; }
onsubmit 函数返回失败的是时候就终止表单提交。
<form onsubmit = "return checkForm(this)"> ... </form>
- Java使用反射和注解实现参数校验
- Extjs表单输入框异步校验的插件实现方法
- java自定义注解实现前后台参数校验
- Java 自定义注解实现springMVC 参数校验非空判断,为空 则返回响应为空信息
- 详解Ajax请求(三)——jQuery对Ajax的实现及serialize()函数对于表单域控件参数提交的使用技巧
- 润乾报表 参数模板如何实现日期校验?
- JavaScript:使用JavaScript 实现注册表单的校验
- 页面参数校验的过滤器实现
- 使用commons-fileupload实现文件(doc、pdf)上传,提取表单参数并解决中文乱码
- JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置
- 表单 - Validatebox - 表单参数校验
- 用快逸报表轻松实现带参数表单的报表
- 通过表单form模拟post方式提交多参数实现文件下载
- Bootstrap实现登录校验表单(带验证码)
- 使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验
- 用超链接提交表单,实现在动态网页的url中隐藏参数
- 一步一步实现一个简单的表单校验框架一
- JavaScript——注册表单参考模板(含参数格式校验)
- 妙用Bootstrap的 popover插件实现校验表单提示功能
- JS实现一个表单form,多个submit按钮提交时带不同的action参数