从阿里妈妈发现的几个不错的表单验证函数


Posted in Javascript onSeptember 21, 2007

//--------
// 检查当前浏览器是否为Netscape
//--------
function isNetscape(){
    app=navigator.appName.substring(0,1);
    if (app=='N') return true;
    else {return false;}
}

//--------
// 保存当前Form表单(仅适用于IE浏览器)
//--------
function formSaveCheck(fileName){
    if(isNetscape()){alert("Sorry, these function is not supported")}    
    else document.execCommand('SaveAs',null,fileName)
}

//--------
// 校验数据的合法性
//--------
function isValidReg( chars){
    var re=/<|>|\[|\]|\{|\}|『|』|※|○|●|◎|§|△|▲|☆|★|◇|◆|□|?|?|?|?|⊙|?|ㄅ|ㄆ|
ㄇ|ㄈ|ㄉ|ㄊ|ㄋ|ㄌ|ㄍ|ㄎ|ㄏ|ㄐ|ㄑ|ㄒ|ㄓ|ㄔ|ㄕ|ㄖ|ㄗ|ㄘ|ㄙ|ㄚ|ㄛ|ㄜ|ㄝ|ㄞ|ㄟ|ㄢ|ㄣ|ㄤ|ㄥ|ㄦ|ㄧ|ㄨ|ㄩ
|■|?|?|\*|@|#|\^|\\/;
    if (re.test( chars) == true) {
        return false;
    }else{
        return true;
    }    
}

//--------
// 检查数据的长度是否合法
//--------
function isValidLength(chars, len) {
    if (chars.length > len) {
        return false;
    }
    return true;
}

//--------
// 校验URL的合法性
//--------
function isValidURL( chars ) {
    //var re=/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)((((\w+(-*\w*)+)\.)+((com)|
(net)|(edu)|(gov)|(org)|(biz)|(aero)|(coop)|(info)|(name)|(pro)|(museum))(\.([a-z]{2}))?)|((\w+(-
*\w*)+)\.(cn)))$/;
    var re=/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(\S+\.\S+)$/;
    //var re=/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(((((\w+(-*\w*)+)\.)+((com)|
(net)|(edu)|(gov)|(org)|(biz)|(aero)|(coop)|(info)|(name)|(pro)|(museum)|(cn)|(tv)|(hk))(\.([a-z]
{2}))?)|((\w+(-*\w*)+)\.(cn)))((\/|\?)\S*)*)$/;
    if (!isNULL(chars)) {
        chars = jsTrim(chars);
        if (chars.match(re) == null)
            return false;
        else
            return true;
    }
    return false;
}

//--------
// 校验数字的合法性
//--------
function isValidDecimal( chars ) {
    var re=/^\d*\.?\d{1,2}$/;
    if (chars.match(re) == null)
        return false;
    else
        return true;
}

//--------
// 校验数字的合法性
//--------
function isNumber( chars ) {
    var re=/^\d*$/;
    if (chars.match(re) == null)
        return false;
    else
        return true;
}

//--------
// 校验邮编的合法性
//--------
function isValidPost( chars ) {
    var re=/^\d{6}$/;
    if (chars.match(re) == null)
        return false;
    else
        return true;
}

//--------
// 去掉数据的首尾空字符
//--------
function jsTrim(value){
  return value.replace(/(^\s*)|(\s*$)/g,"");
}

//--------
// 校验数据是否为空(当数据为空字符时也为NULL)
//--------
function isNULL( chars ) {
    if (chars == null)
        return true;
    if (jsTrim(chars).length==0)
        return true;
    return false;
}

//--------
// 校验Email的合法性
//--------
function checkEmail (fieldName, bMsg) 
{
    var emailStr = fieldName.value;

    var emailPat=/^(.+)@(.+)$/
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
    var validChars="\[^\\s" + specialChars + "\]"
    var quotedUser="(\"[^\"]*\")"
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
    var atom=validChars + '+'
    var word="(" + atom + "|" + quotedUser + ")"
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

    var matchArray=emailStr.match(emailPat)
    if (matchArray==null) 
    {
        if (bMsg) alert("Email address seems incorrect (check @ and .'s)")
        return false
    }
    var user=matchArray[1]
    var domain=matchArray[2]

    // See if "user" is valid 
    if (user.match(userPat)==null) 
    {
        if (bMsg) alert("The Email address seems incorrect.")
        // fieldName.focus();
        return false
    }

    /* if the e-mail address is at an IP address (as opposed to a symbolic
       host name) make sure the IP address is valid. */
    var IPArray=domain.match(ipDomainPat)
    if (IPArray!=null) 
    {
        for (var i=1;i<=4;i++)
        {
            if (IPArray[i]>255)
            {
                if (bMsg) alert("Destination IP address is invalid!")
                return false
            }
        }
        return true
    }

    // Domain is symbolic name
    var domainArray=domain.match(domainPat)
    if (domainArray==null) 
    {
        if (bMsg) alert("The domain name doesn't seem to be valid.")
        return false
    }

    /* domain name seems valid, but now make sure that it ends in a
    three-letter word (like com, edu, gov) or a two-letter word,
    representing country (uk, nl), and that there's a hostname preceding 
    the domain or country. */

    var atomPat=new RegExp(atom,"g")
    var domArr=domain.match(atomPat)
    var len=domArr.length
    if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) 
    {
        // the address must end in a two letter or three letter word.
        if (bMsg) alert("The address must end in a three-letter domain, or two letter country.")
        return false
    }

    // Make sure there's a host name preceding the domain.
    if (len<2)
    {
        if (bMsg) alert("This address is missing a hostname!")
        return false
    }

    // If we've got this far, everything's valid!
    return true;
}

//--------
// 判断是否为闰年
//--------
function isLeapYear(year){
  if (year % 4 != 0)
    return false;
  if (year % 400 == 0)
    return true;
  if (year % 100 == 0)
    return false;
  return true;
}

//--------
// 校验日期的合法性
//--------
function validateDate(day,month,year)
{
    if ((day<=0)||(month<=0)||(year<=0))
        return false;

    if ((month>=1)&&(month<=12)) {
        if (month == 2) {
            if (isLeapYear(year)) {
                if (day<=29) 
                    return true;
            } else {
                if (day<=28)
                    return true;
                else
                    return false;
            }
        } else if ((month==4)||(month==6)||(month==9)||(month==11)) {
            if (day<=30)
                return true;
            else
                return false;
        } else {
            if (day<=31)
                return true;
            else
                return false;
        }
    }

    return false;
}

//--------
// 判断数据是否包含都是Single Byte
//--------
function isSingleByteString(str)
{
   var rc = true;
   var j = 0, i = 0;
   for (i=0; i<str.length; i++) {
     j = str.charCodeAt(i);
     if (j>=128) {
       rc = false;
       break;
     }
   }
   return rc;
}

var submitEvent = true;
function checkDoubleSubmit(){
    return submitEvent;
}

//--------
// 弹出窗口
// 参数:url-弹出窗口显示URL的内容
//       w-弹出窗口的宽度
//       h-弹出窗口的高度
//       isCenter-控制弹出窗口是否在屏幕中央显示,值为true/false
//       isResizable-控制弹出窗口是否可以改变大小,值为true/false
//       isScroll-控制弹出窗口是否有滚动条,值为true/false
//--------
function popupWindow(url,w,h,isCenter,isResizable,isScroll) {
    if (isNULL(url)) return;
    var scrLeft = 0;
    var scrTop = 0;
    var scroll = "no";
    var resize = "no";
    if (isCenter) {
        scrLeft = (screen.width-w)/2;
        scrTop = (screen.height-h)/2;
    }
    if (isResizable) resize="yes";
    if (isScroll) scroll = "yes";
    window.open(url, 'popupWindow', 
'height='+h+',width='+w+',top='+scrTop+',left='+scrLeft+',toolbar=no,menubar=no,scrollbars='+scrol
l+',resizable='+resize+',location=no,status=no');
}

//--------
// 弹出窗口
// 参数:url-弹出窗口显示URL的内容
//       w-弹出窗口的宽度
//       h-弹出窗口的高度
//       isCenter-控制弹出窗口是否在屏幕中央显示,值为true/false
//       isResizable-控制弹出窗口是否可以改变大小,值为true/false
//       isModal-控制弹出窗口是否为模式或非模式对话框,值为ture/false
//--------
function popupModalWindow(url,w,h,isCenter,isResizable,isModal) {
    if (isNULL(url)) return;
    var scrLeft = 0;
    var scrTop = 0;
    var resize = "no";
    var cnt = "no";
    if (isCenter) {
        cnt="yes";
        scrLeft = (screen.width-w)/2;
        scrTop = (screen.height-h)/2;
    }
    if (isResizable) resize="yes";
    if (isModal)
        window.showModalDialog(url, 'popupWindow', 
'dialogWidth:'+w+'px;dialogHeight:'+h+'px;dialogLeft:'+scrLeft+'px;dialogTop:'+scrTop+'px;center:'
+cnt+';help:no;resizable:'+resize+';status:no');
    else
        window.showModelessDialog(url, 'popupWindow', 
'dialogWidth:'+w+'px;dialogHeight:'+h+'px;dialogLeft:'+scrLeft+'px;dialogTop:'+scrTop+'px;center:'
+cnt+';help:no;resizable:'+resize+';status:no');
}

//--------
// 弹出窗口
// 参数:url-弹出窗口显示URL的内容
//       w-弹出窗口的宽度
//       h-弹出窗口的高度
//       isCenter-控制弹出窗口是否在屏幕中央显示,值为true/false
//       isResizable-控制弹出窗口是否可以改变大小,值为true/false
//       isScroll-控制弹出窗口是否有滚动条,值为true/false
//--------
function openWindowCenter(urll,w,h){
  var top=(window.screen.height-h)/2;
  var left=(window.screen.width-w)/2;
  var param='toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no, status=no,top=';
  param=param+top;
  param=param+',left=';
  param=param+left;
  param=param+',height='+h;
  param=param+',width='+w;
  var w=window.open (urll,"",param)
  if(w!=null && typeof(w)!="undefined"){
        w.focus();
  }
}

<script language="javascript">
function encodeHtmlForText(text){
  text = text.replace(new RegExp("&","gm"),"&");
  text = text.replace(new RegExp("<","gm"),"<");
  text = text.replace(new RegExp(">","gm"),">");
  text = text.replace(new RegExp("\'","gm"),"'");
  text = text.replace(new RegExp("\"","gm"),""");
  return text;
}
function encodeHtmlForURL(url){
  url = url.replace(new RegExp("<","gm"),"<");
  url = url.replace(new RegExp(">","gm"),">");
  url = url.replace(new RegExp("\'","gm"),"'");
  url = url.replace(new RegExp("\"","gm"),""");
  return url;
}
function title_url_change(oipt) {
  if(oipt){
      var cnt = oipt.value.length;
    if(cnt<17){
        $i("cntTitle").style.color="blue";
        $i("cntTitle").innerHTML="(您已输入"+cnt+"字)";
    }else{
        $i("cntTitle").style.color="red";
        $i("cntTitle").innerHTML="(文本超长!您已输入"+cnt+"字)";
    }
  }
  var title = $i('_fmm.t._0.ti').value;
  var clickurl = $i('_fmm.t._0.cl').value;
  title = encodeHtmlForText(title);
  clickurl = encodeHtmlForURL(clickurl);
  $i('adTitle').innerHTML = '<a href='+clickurl+'>'+title+'</a>';
}
function title_change() {
  var title = $i('_fmm.t._0.ti').value;
  title = encodeHtmlForText(title);
  $i('adTitle').innerHTML = title;
}
function description_change(oipt) {
  if(oipt){
      var cnt = oipt.value.length;
    if(cnt<33){
        $i("cntDesc").style.color="blue";
        $i("cntDesc").innerHTML="(您已输入"+cnt+"字)";
    }else{
        $i("cntDesc").style.color="red";
        $i("cntDesc").innerHTML="(文本超长!您已输入"+cnt+"字)";
    }
  }
  var desc = $i('_fmm.t._0.d').value;
  desc = encodeHtmlForText(desc);
  $i('adDesc').innerHTML = desc;
}
function dispurl_change() {
  var dispurl = $i('_fmm.t._0.di').value;
  dispurl = encodeHtmlForURL(dispurl);
  $i('adDispUrl').innerHTML = dispurl;
}
function linkurl_change() {
  var clickurl = $i('_fmm.t._0.cl').value;
  clickurl = encodeHtmlForURL(clickurl);
  $i('adClickUrl').innerHTML = clickurl;
}
function check_count($str){
if (!$str) return 0;
var $c=0;
for (var $i=0;$i<$str.length;$i++){
   if ($str.charCodeAt($i) > 255){
        $c++;
        $c++;
    }else
        $c++;
}
return $c;
}
function validation() {
    $i('_fmm.t._0.n').value = jsTrim($i('_fmm.t._0.n').value);
    $i('_fmm.t._0.ti').value = jsTrim($i('_fmm.t._0.ti').value);
    $i('_fmm.t._0.d').value = jsTrim($i('_fmm.t._0.d').value);
    $i('_fmm.t._0.di').value = jsTrim($i('_fmm.t._0.di').value);
    $i('_fmm.t._0.cl').value = jsTrim($i('_fmm.t._0.cl').value);

    var adName = $i('_fmm.t._0.n').value;
    var adtitle = $i('_fmm.t._0.ti').value;
    var addescription = $i('_fmm.t._0.d').value;
    var addispurl = $i('_fmm.t._0.di').value;
    var adclickurl = $i('_fmm.t._0.cl').value;
    var msg="";

    $i('_fmm.t._0.t').value = jsTrim($i('_fmm.t._0.t').value);

    var tags = $i('_fmm.t._0.t').value;

    if(!isValidReg(tags)){
        msg=msg+"关键词包含非法字符!\n";
    }
    if(!isValidLength(tags,32)){
        msg=msg+"您输入的关键词长度超过限制!\n"
    }

    if(isNULL(adName)){
        msg=msg+"请输入广告名称!\n";
    }
    if(!isValidReg(adName)){
        msg=msg+"广告名称包含非法字符!\n";
    }
    if(!isValidLength(adName,16)){
        msg=msg+"输入广告名称长度超过限制!\n"
    }
    if(isNULL(adtitle)){
        msg=msg+"请输入标题内容!\n";
    }
    if(!isValidLength(adtitle,16)){
        msg=msg+"输入标题长度超过限制!\n";
    }
    if(!isValidReg(adtitle)){
        msg=msg+"标题内容包含非法字符!\n";
    }
    if(isNULL(addescription)){
        msg=msg+"请输入描述内容!\n";
    }
    if(!isValidLength(addescription,32)){
        msg=msg+"输入描述长度超过限制!\n";
    }
    if(!isValidReg(addescription)){
        msg=msg+"描述内容包含非法字符!\n";
    }
    if(isNULL(addispurl)){
        msg=msg+"请输入显示网址内容!\n";
    }
    if(!isValidLength(addispurl,1024)){
        msg=msg+"输入显示网址长度超过限制!\n";
    }
    if(!isValidURL(addispurl)){
        msg=msg+"显示网址输入不合法!\n";
    }
    if(isNULL(adclickurl)){
        msg=msg+"请输入链接网址内容!\n";
    }
    if(!isValidLength(adclickurl,512)){
        msg=msg+"输入链接网址长度超过限制!\n";
    }
    if(!isValidURL(adclickurl)){
        msg=msg+"链接网址输入不合法!\n";
    }
    if(getHostName(adclickurl)!=getHostName(addispurl)){
        msg=msg+"显示URL必须与链接URL位于同一域名下\n";
    }
    if(!isNULL(msg)){
        alert(msg);
        return false;
    }
    return true;
}

function getHostName(a){
    a = a.toLowerCase();
    var headlength = 0;
    if(a.indexOf("http://")==0){
        headlength = 7;
    }else if(a.indexOf("https://")==0){
        headlength = 8;
    }
    a = a.substr(headlength);
    if(a.indexOf("/")>-1){
        a = a.substr(0,a.indexOf("/"));
    }
    return a;
}

function addConfirm(form) {
    var isvalidate = validation();
    if(isvalidate){
        form.submit();
    }else{
        return false;
    }
}
function doTest() {
    var adclickurl = $i('_fmm.t._0.cl').value;
    var msg = '';
    if(isNULL(adclickurl)){
        msg=msg+"请输入链接网址内容!\n";
    }
    if(!isValidLength(adclickurl,512)){
        msg=msg+"输入链接网址长度超过限制!\n";
    }
    if(!isValidURL(adclickurl)){
        msg=msg+"链接网址输入不合法!\n";
    }
    if(!isNULL(msg)){
        alert(msg);
        return false;
    }
    popup = window.open(adclickurl, 'popupnav', 
'width=400,height=300,left=480,top=250,resizable=1,scrollbars=yes');
    return false;
}
function doInit() {
    var dispURL = $i('_fmm.t._0.di');
    var clickURL = $i('_fmm.t._0.cl');
    if(clickURL.value == '') {
       clickURL.value = 'http://';
    }
    if(dispURL.value == '') {
       dispURL.value = 'http://';
    }
}
doInit();
</script>

Javascript 相关文章推荐
jquery validate.js表单验证的基本用法入门
May 13 Javascript
jquery 单引号和双引号的区别及使用注意
Jul 31 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
Aug 27 Javascript
javascript+canvas制作九宫格小程序
Dec 28 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
Aug 07 Javascript
使用Angular.js开发的注意事项
Oct 19 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
Node.js Buffer模块功能及常用方法实例分析
Jan 05 Javascript
vue设计一个倒计时秒杀的组件详解
Apr 06 Javascript
vue实现Excel文件的上传与下载功能的两种方式
Jun 28 Javascript
Vue监视数据的原理详解
Feb 24 Vue.js
指定js可访问其它域名的cookie的方法
Sep 18 #Javascript
完整显示当前日期和时间的JS代码
Sep 17 #Javascript
符合标准的js表单提交的代码
Sep 13 #Javascript
js类后台管理菜单类-MenuSwitch
Sep 12 #Javascript
一实用的实现table排序的Javascript类库
Sep 12 #Javascript
JS类定义原型方法的两种实现的区别评论很多
Sep 12 #Javascript
js类中获取外部函数名的方法与代码
Sep 12 #Javascript
You might like
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
HTML DOM的nodeType值介绍
2011/03/31 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
利用Python如何生成随机密码
2016/04/20 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
荷兰手表网站:Watch2Day
2018/07/02 全球购物
幼儿园亲子活动方案
2014/01/29 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
广告词串烧
2014/03/19 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
社区重阳节活动总结
2015/03/24 职场文书
运动会广播稿20字
2015/08/19 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
Java 多态分析
2022/04/26 Java/Android