本文为大家分享一个很实用的js验证框架实现源码,供大家参考,具体内容如下
关键方法和原理:
function check(thisInput) 方法中的 if (!eval(scriptCode)) { return false; }
调用示例:
复制代码 代码如下:<input type="text" class="text_field percentCheck" name="progress_payment_two" id="progress_payment_two" inputName="进度款2比例(%)" validate="isNumeric;notNull" maxLength="350" value="" />
验证时会自动调用:isNumeric 方法 和 notNull方法并返回验证的结果信息。
var ConfigValidateInfoType = "writeAlert"; //支持writeAlert和writePage,"writePage;writeAlert" var rmTempStatusIsAlert = false; var rmTempStatusIsFocus = false; var beginValidate = true; var set_All_Venus_Inputs_Default = true; String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); } function checkAllForms(){ var checkResult = true; rmTempStatusIsAlert = false; rmTempStatusIsFocus = false; setAllVenusInputsDefault(); for (var i=0;i<document.forms.length;i++) { for (var j=0;j<document.forms[i].elements.length;j++) { var thisInput = document.forms[i].elements[j]; if ( thisInput.type!="hidden" && thisInput.type!="button" && !( thisInput.id.indexOf("TF_")>=0 && thisInput.id.indexOf("_TF")>0 ) &&thisInput.clientWidth!=0&&thisInput.style&&thisInput.style.display!='none'){ /* if(validateStr != null && validateStr.length > 0 ){ if(thisInput.tagName == 'TEXTAREA' && srcstr != '') { srcstr = replaceEnter(srcstr); if( thisInput.maxLength != null && thisInput.maxLength > 0 ){ if (getStrLength(srcstr) > thisInput.maxLength){ writeValidateInfo(thisInput, "焦点处输入长度超长\n请确保输入长度在" +frm.maxLength+"以内"); return false; } } } } */ if(thisInput.id&&thisInput.id.indexOf("supplier_id_ref_")!=-1&&document.getElementById("unionDiv")&&document.getElementById("unionDiv").style.display=="none"){ continue; } var rtValue = check(thisInput); if(checkResult && rtValue == false) { checkResult = false; break; } } } } return checkResult; } function check(thisInput) { var validateStr = thisInput.validate; if(validateStr == null) { return true; } var inputValue = thisInput.value; if ( beginValidate ) { var validateTemp = new Array(); validateTemp = validateStr.split(';'); for (var i=0;i<validateTemp.length;i++) { if(validateTemp[i].length == 0) { continue; } s = replaceSingleQuote(inputValue); try{ var scriptCode = "javascript:" + validateTemp[i]; //"javascript:" + validateTemp[i] + "('" + s + "', " + "thisInput)" if(validateTemp[i].indexOf("(") < 0 || validateTemp[i].indexOf(")") < 0) { scriptCode = "javascript:" + validateTemp[i] + "(s,thisInput)" } if (!eval(scriptCode)) { return false; } } catch(e) { alert("校验函数"+validateTemp[i]+"有异常,请检查!" + "\n" + e.message ); return false; } } } return true; } function setAllVenusInputsDefault() { var frmslen = document.forms.length; for (var i=0;i<frmslen;i++) { var inslen = document.forms[i].elements.length; for (var j=0;j<inslen;j++) { var frm = document.forms[i].elements[j] if ( frm.type!="hidden" && frm.type!="button" && !( frm.id.indexOf("TF_")>=0 && frm.id.indexOf("_TF")>0 ) ){ if(frm.validate != null) { setVenusInputDefault(frm); writeValidateInfoAfterObject("", frm); } } } } return true; } function setVenusInputDefault(_frm) { _frm.style.borderStyle=""; _frm.style.borderColor=""; if( _frm.value != null ){ _frm.style.backgroundColor = ""; _frm.style.color = ""; } } function replaceEnter(_str) { /**替换换行回车字符**/ var str = _str; str = str.replace('\n','') str = str.replace('\r','') //alert(str.indexOf('\n')) if(str.indexOf('\n')!=-1 &&str.indexOf('\r')!=-1) { return replaceEnter(str); } else { return str; } } function replaceSingleQuote(_str) { /**替换换行回车字符**/ var str = _str; str = str.replace('\\','\\u005C'); str = str.replace('\'','\\u0027'); str = str.replace('(','\\u0028'); str = str.replace(')','\\u0029'); str = str.replace('\"','\\u0022'); str = str.replace(';','\\u0038'); //str = Jtrim(str); return str; } function isContains(_validateStr,_validator) { for (var i=0;i<_validateStr.length;i++) { if(_validateStr[i] == _validator) return true; } return false; } function writeValidateInfo(info, thisObj) { var inputName = getInputNameFromObject(thisObj); info = inputName + "的输入有误!\n" + info; if(ConfigValidateInfoType.indexOf("writePage") >= 0) { writeValidateInfoAfterObject(info, thisObj); } if(ConfigValidateInfoType.indexOf("writeAlert") >= 0) { writeValidateInfoAlert(info, thisObj); } if(!rmTempStatusIsFocus) { setVenusInputError(thisObj); rmTempStatusIsFocus = true; } } function setVenusInputError(_frm) { try { //_frm.click(); // click会导致文件上传错误 _frm.focus(); //由于SELCET不支持内容选择,且不用内容选择,所以特殊处理,防止报错 //修改:李岳 2009-11-12 if(_frm.tagName!="SELECT"){ _frm.select(); } _frm.style.borderStyle="dashed"; _frm.style.borderColor="rgb(255,50,0)"; if( _frm.value != null && _frm.value.length > 0 ){ _frm.style.backgroundColor = "highlight"; _frm.style.color = "white"; } } catch(e) { alert(e.message); } } function writeValidateInfoAlert(info, thisObj) { if(!rmTempStatusIsAlert) { alert(info); rmTempStatusIsAlert = true; } } function writeValidateInfoAfterObject(info, thisObj) { //写校验信息 var validateInfoObj = null; thisObj = getValidatePosition(thisObj); if(thisObj.nextSibling != null && thisObj.nextSibling.nextSibling != null && thisObj.nextSibling.tagName != null && thisObj.nextSibling.tagName.toUpperCase() == "FONT" && thisObj.nextSibling.nextSibling.tagName.toUpperCase() == "SPAN" && thisObj.nextSibling.nextSibling.className == "font_remain_prompt") { validateInfoObj = thisObj.nextSibling.nextSibling; } else { thisObj.insertAdjacentHTML("afterEnd", "<font></font><span class=font_remain_prompt></span>"); validateInfoObj = thisObj.nextSibling.nextSibling; } if(validateInfoObj.innerHTML.length > 0 || info.length > 0) { validateInfoObj.innerHTML = info; } } function getValidatePosition(thisObj) { if(thisObj.nextSibling != null && thisObj.nextSibling.className == "refButtonClass") { thisObj = getValidatePosition(thisObj.nextSibling); } else if(thisObj.nextSibling != null && thisObj.nextSibling.type == "hidden"){ thisObj = getValidatePosition(thisObj.nextSibling); } return thisObj; } function getInputNameFromObject(thisInput) { var inputName = thisInput.inputName ; if ( inputName == null || inputName.length == 0 ){ inputName = thisInput.name; if ( inputName == null || inputName.length == 0 ){ inputName = ""; } } return inputName; } function getStrLength(str){ var len = 0; for(var i=0;i<str.length;i++){ if (str.charCodeAt(i) > 255) len += 2; else len ++; } return len; } /********************************************************************** *ranmin validate ***********************************************************************/ function notNull(s, thisInput) { //不能为空 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if (s.length == 0){ writeValidateInfo("不能为空或空格!", thisInput); return false; } var s = Jtrim(s); if ( s.length == 0){ writeValidateInfo("不能为空或空格!", thisInput); return false; } return true; } function isJine(s, thisInput) { //不能为空 var a=/^[0-9]*(\.[0-9]{1,2})"有非法字符或者小数点位数超过两位", thisInput); return false; }else{ return true; } } function isMobile(s, thisInput) { //是手机号码:必须以数字开头,除数字外,可含有“-” //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } var obj=new Array() obj[0]="13"; obj[1]="14"; obj[2]="15"; obj[3]="18"; if(s != null ){ if(s.length != 11){ writeValidateInfo('请输入合法的手机号码!', thisInput); return false; } var mob = 0; for ( var int = 0; int < obj.length; int++) { if(s.substring(0,2) == obj[int]){ mob = mob+1; } } if(mob == 0){ writeValidateInfo('请输入合法的手机号码!', thisInput); return false; } } var patrn=/^[+]{0,1}(\d){1,3}[ ]"请输入中文", thisInput); return ret; } return ret; } function notChinese(s,thisInput) { //不含中文 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } var ret = ischinese(s); if(ret){ writeValidateInfo("不能输入中文",thisInput); return false; } return true; } function isNum(s,thisInput) { //是数字 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } var digits = "0123456789"; var i = 0; var sLength = s.length; while ((i < sLength)) { var c = s.charAt(i); if (digits.indexOf(c) == -1){ writeValidateInfo ("请输入数字!",thisInput); return false; } i++; } return true; } function isNumBigtoZero(s,thisInput) { //是数字 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } var digits = "0123456789"; var i = 0; var sLength = s.length; while ((i < sLength)) { var c = s.charAt(i); if (digits.indexOf(c) == -1){ writeValidateInfo ("请输入数字!",thisInput); return false; } i++; } try{ if(thisInput.value<=0){ writeValidateInfo ("输入数值必须大于零!",thisInput); return false; } }catch(e){ } return true; } function isEmail(s,thisInput) { //是电子邮件 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } if (s.length > 100) { writeValidateInfo("email地址长度不能超过100位!",thisInput); return false; } var regu = /^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$/; if (regu.exec(s)) { return true; } else { writeValidateInfo ("请输入有效合法的E-mail地址 !",thisInput); return false; } } function isIP() { //是IP var patrn=/^[0-9.]{1,20}$/; if (!patrn.exec(s)){ writeValidateInfo('请输入IP值!',thisInput); return false } return true; } /********************************************************************** *Venus Web JavaScript Code:HTC 校验notNull ***********************************************************************/ function notNullWithoutTrim(s,thisInput) { //是"" //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if ( s.length == 0){ writeValidateInfo('请输入,该项不能为空!',thisInput); return false; } return true; } function isInteger(str,thisInput) { //是整数 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } str=str.trim(); if(str.length ==0){ return true; } var reg = "0123456789"; for (var i=0;i<str.length;i++){ var m = str.charAt(i); if (reg.indexOf(m) == -1) { writeValidateInfo('请输入整数!',thisInput); return false; } } return true; } function isNormalStrOnWeb(s,thisInput) { //是普通字符(非html标记) if (s.substring(0,1) == "<" || s.substring(0,1) == "\>" || s.substring(0,1) == " "){ writeValidateInfo("焦点处不能以<或\>或空格开头",thisInput); return false; } if (!HoldCode(s)){ writeValidateInfo("焦点处不能输入全角\"·\"/\"—\"/\"——\"字符",thisInput); return false; } if (s.trim().length > 0){ if (s.indexOf("\"") > -1){ writeValidateInfo("焦点处不能输入双引号!!",thisInput); return false; } if (s.indexOf("\'") > -1){ writeValidateInfo("焦点处不能输入单引号",thisInput); return false; } if (s.indexOf("\\") > -1){ writeValidateInfo("焦点处不能输入 '\\' ",thisInput); return false; } } return true; } //基本函数列表 function Jtrim(str) { //去空隔函数 var i = 0; var len = str.length; if ( str == "" ) return( str ); var j = len -1; var flagbegin = true; var flagend = true; while ( flagbegin == true && i< len) { if ( str.charAt(i) == " " ) { i=i+1; flagbegin=true; } else { flagbegin=false; } } while (flagend== true && j>=0) { if (str.charAt(j)==" ") { j=j-1; flagend=true; } else { flagend=false; } } if ( i > j ) return (""); var trimstr = str.substring(i,j+1); return trimstr; } function isNumber(s) { //数字判断函数 s=s.trim(); if(s.length ==0){ return true; } var digits = "0123456789"; var i = 0; var sLength = s.length; while ((i < sLength)) { var c = s.charAt(i); if (digits.indexOf(c) == -1) { return false; } i++; } return true; } function ischinese(s) { //判断是否中文函数 var ret=true; for(var i=0;i<s.length;i++) ret=ret && (s.charCodeAt(i)>=10000); return ret; } /********************************************************************** *Venus Web JavaScript Code:HTC 表单通用检验(完善中) ***********************************************************************/ function HoldCode(str){ for(var i=0;i<str.length;i++){ if (str.charCodeAt(i) == 8212 || str.charCodeAt(i) == 183){ return false; } } return true; } function validateForm(current_form) { for (var i=0;i<current_form.length;i++){ if (current_form[i].type =="text" || current_form[i].type == "radio"){ if (current_form[i].value.substring(0,1) == "<" || current_form[i].value.substring(0,1) == "\>" || current_form[i].value.substring(0,1) == " "){ alert("焦点处不能以<或\>或空格开头"); current_form[i].focus(); current_form[i].select(); return false; } if (getStrLength(current_form[i].value) > current_form[i].maxLength){ alert("焦点处输入长度超长\n请确保输入长度在" +current_form[i].maxLength+"以内"); current_form[i].focus(); current_form[i].select(); return false; } if (!HoldCode(current_form[i].value)){ alert("焦点处不能输入全角\"·\"/\"—\"/\"——\"字符"); current_form[i].focus(); current_form[i].select(); return false; } if (!is_empty(current_form[i].value)){ if (current_form[i].name == "scriptDefine"){ return true; } if (current_form[i].value.indexOf("\"") > -1){ alert("焦点处不能输入双引号"); current_form[i].focus(); current_form[i].select(); return false; } } } } return true; } function checkNumber(s, inputName) { try{ //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } var thisObj = event.srcElement; var maxLength = thisObj.integerDigits; var scale = thisObj.decimalDigits; return checkNumberImpl(s, maxLength, scale); }catch(e){ } } function checkNumberImpl(s, maxLength, scale) { //校验运行里程,小数,整数部分最多为10-2 if(s == "") { return true; } if(scale == undefined) { scale = 0; } if(maxLength == undefined) { maxLength = 38; } if(!isFloatNumber(s)) { return false; } if(s.indexOf(".") >0) { if(s.indexOf(".") <= maxLength && (Math.round(s*(pow(10,scale)))<(pow(10,(maxLength + scale))))) { return true; } else { alert("整数部分最大为" + (maxLength - scale) + "位!"); return false; } } else { if(s.length <= maxLength) { return true; } else { alert("整数部分最大为" + maxLength + "位!!"); return false; } } } function isFloatNumber(s,inputName) { //判断是否 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } var digits = "0123456789."; var i = 0; var sLength = s.trim().length; while ((i < sLength)) { var c = s.charAt(i); if (digits.indexOf(c) == -1){ writeValidateInfo("请输入有效数字!", inputName); return false; } i++; } if(s.indexOf(".") != s.lastIndexOf(".")) { alert("小数点不对,请输入有效数字!"); return false; } else { return true; } } function isSearch(s,thisInput) { //不能输入非法字符 if(s.length == 0 ) return true; var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/"'_}/]/; if (!patrn.exec(s) || !patrn2.exec(s)){ writeValidateInfo('输入项中含非法字符,请重新输入!',thisInput); return false; } return true ; } //=============================================================================================== /** * 验证数字(正整数或者包含小数的数字). */ function isNumeric(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^\d+(\.\d+)"请输入正整数或者小数!", thisInput); return false; } return true; } /** * 验证数字(正整数). */ function checkInt(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^[0-9]\d*$/; if (!reg.test(value)) { writeValidateInfo ("请输入正整数!", thisInput); return false; } return true; } /** * 验证数字(整数位最大为10位,可以带小数) */ function validateNumericAndLength(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^\d{1,10}(\.\d+)"请输入正整数或者小数(整数位只能有10位)!", thisInput); return false; } return true; } /** * 验证数字(18,2) */ function isNum18p2(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){} value=value.trim(); if(value.length ==0){ return true; } var reg = /^(-)"请输入数字(整数位最多16位,小数位最多2位)!", thisInput); return false; } return true; } /** * 验证数字(18,4) */ function isNum18p4(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){} value=value.trim(); if(value.length ==0){ return true; } var reg = /^(-)"请输入数字(整数位最多14位,小数位最多4位)!", thisInput); return false; } return true; } /** * 验证数字(5,2) */ function isNum5p2(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){} value=value.trim(); if(value.length ==0){ return true; } var reg = /^(-)"请输入数字(整数位最多3位,小数位最多2位)!", thisInput); return false; } return true; } /** * 验证Email. */ function checkEmail(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; if (!reg.test(value)) { writeValidateInfo ("请输入正确的Email地址!", thisInput); return false; } return true; } /** * 验证身份证(15位或者18位身份证). */ function checkIdCard(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^\d{15}(\d{2}[A-Za-z0-9])"请输入正确的身份证号码!", thisInput); return false; } return true; } /** * 验证邮政编码. */ function checkPostCode(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^[0-9]\d{5}$/; if (!reg.test(value)) { writeValidateInfo ("请输入正确的邮政编码!", thisInput); return false; } return true; } /** * 验证是否为中文字符. */ function checkChinese(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^[\u0391-\uFFE5]+$/; if (!reg.test(value)) { writeValidateInfo ("请输入中文字符!", thisInput); return false; } return true; } /** * 验证是否为非法字符. */ function checkInvalidString(value, thisInput) { var reg = /^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/"输入的字符中包含特殊字符,请重新输入!", thisInput); return false; } return true; } function checkMoney(s, inputName) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } s=s.trim(); if(s.length ==0){ return true; } if(s==""){ writeValidateInfo("金额不能为空!", inputName); return false; } if(isFloatNumber(s,inputName)==false){ writeValidateInfo("非法金额值!", inputName); return false; } var maxLength = 10; var scale =2; return checkNumberImpl(s, maxLength, scale,inputName); } /** * 校验分数是否在0-100 */ function isAdultAge(str,thisInput) { //是整数 //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } str=str.trim(); if(str.length ==0){ return true; } if(parseInt(str)<0 || parseInt(str)>100){ writeValidateInfo('请输入合法分数(0--100之间)!',thisInput); return false; } return true; } /** * 6 级强度设置(数字、大写字母、小写字母、特殊字符、长度>=6、长度>=10) * 如果密码为空,返回 0 */ function pwdStrength(pwd) { var sum = [0, 0, 0]; for (var i=0; i<pwd.length; i++) { var c = pwd.charCodeAt(i); if (c >=48 && c <=57) //数字 sum[0] = 1; else if (c >=65 && c <=90) //大写字母 sum[1] = 1; else if (c >=97 && c <=122) //小写字母 sum[1] = 1; else //特殊字符 sum[2] = 1; } var level = sum[0] + sum[1] + sum[2] ; if (pwd.length >= 8) level++; return level; } function isBiggerZero(value, thisInput) { //已经是数字,然后必须大于0 if(thisInput.value<=0){ writeValidateInfo('请输入一个大于零的数字!',thisInput); return false; } return true; } function isNonnegative(value, thisInput) { if(thisInput.value<0){ writeValidateInfo('请输入一个非负的数字!',thisInput); return false; } return true; } /** * 验证数字(20,6) */ function isNum20p6(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){} value=value.trim(); if(value.length ==0){ return true; } var reg = /^(-)"请输入数字(整数位最多14位,小数位最多6位)!", thisInput); return false; } return isBiggerZero(value, thisInput); } /** * 验证数字(18,6) */ function isNum18p6(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){} value=value.trim(); if(value.length ==0){ return true; } var reg = /^(-)"请输入数字(整数位最多12位,小数位最多6位)!", thisInput); return false; } return isBiggerZero(value, thisInput); } function isNonnegative20p6(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){} value=value.trim(); if(value.length ==0){ return true; } var reg = /^(-)"请输入数字(整数位最多14位,小数位最多6位)!", thisInput); return false; } return isNonnegative(value, thisInput); } /** * 验证数字(20,4) */ function isNum20p4(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){} value=value.trim(); if(value.length ==0){ return true; } var reg = /^(-)"请输入数字(整数位最多16位,小数位最多4位)!", thisInput); return false; } return isBiggerZero(value, thisInput); } /** * 供应商输入的单批次保证金金额只能是正整数并且只能精确到百位 */ function isDPCBZJ(value, thisInput) { //去掉空格 try{ thisInput.value=thisInput.value.trim(); }catch(e){ } value=value.trim(); if(value.length ==0){ return true; } var reg = /^[1-9]\d*00$/; if (!reg.test(value)) { writeValidateInfo ("请输入正确的保证金金额!", thisInput); return false; } return true; } //报表招标年度起始年度不能大于终止年度的判断 function validateYear(startYear,endYear,flag) { if(startYear > endYear){ if(flag==1){ alert("起始月份不能大于终止月份"); return false; }else{ alert("招标起始年度不能大于终止年度"); return false; } } return true; }
以上就是本文的全部内容,希望对大家学习JavaScript程序设计有所帮助。
标签:
js验证框架,js验证,js框架
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
狼山资源网 Copyright www.pvsay.com
暂无“非常实用的js验证框架实现源码 附原理方法”评论...