javascript 常用验证函数总结


Posted in Javascript onJune 28, 2016
/**
 * 2010-7-13
 * 贺 臣
 * 情 缘
 * js各种表单数据验证
 */
/**************************************************************************************/
/*************************************数字的验证*****************************************/
/**************************************************************************************/

/**
 * 检查输入的一串字符是否全部是数字
 * 输入:str 字符串
 * 返回:true 或 flase; true表示为数字
 */
function checkNum(str){
  return str.match(/\D/) == null;
}


/**
 * 检查输入的一串字符是否为小数
 * 输入:str 字符串
 * 返回:true 或 flase; true表示为小数
 */
function checkDecimal(str){
  if (str.match(/^-?\d+(\.\d+)?$/g) == null) {
    return false;
  }
  else {
    return true;
  }
}

/**
 * 检查输入的一串字符是否为整型数据
 * 输入:str 字符串
 * 返回:true 或 flase; true表示为小数
 */
function checkInteger(str){
  if (str.match(/^[-+]?\d*$/) == null) {
    return false;
  }
  else {
    return true;
  }
}

/**************************************************************************************/
/*************************************字符的验证*****************************************/
/**************************************************************************************/


/**
 * 检查输入的一串字符是否是字符
 * 输入:str 字符串
 * 返回:true 或 flase; true表示为全部为字符 不包含汉字
 */
function checkStr(str){
  if (/[^\x00-\xff]/g.test(str)) {
    return false;
  }
  else {
    return true;
  }
}


/**
 * 检查输入的一串字符是否包含汉字
 * 输入:str 字符串
 * 返回:true 或 flase; true表示包含汉字
 */
function checkChinese(str){
  if (escape(str).indexOf("%u") != -1) {
    return true;
  }
  else {
    return false;
  }
}


/**
 * 检查输入的邮箱格式是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 */
function checkEmail(str){
  if (str.match(/[A-Za-z0-9_-]+[@](\S*)(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*)/g) == null) {
    return false;
  }
  else {
    return true;
  }
}


/**
 * 检查输入的手机号码格式是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 */
function checkMobilePhone(str){
  if (str.match(/^(?:13\d|15[89])-?\d{5}(\d{3}|\*{3})$/) == null) {
    return false;
  }
  else {
    return true;
  }
}


/**
 * 检查输入的固定电话号码是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 */
function checkTelephone(str){
  if (str.match(/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/) == null) {
    return false;
  }
  else {
    return true;
  }
}

/**
 * 检查QQ的格式是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 */
function checkQQ(str){
  if (str.match(/^\d{5,10}$/) == null) {
    return false;
  }
  else {
    return true;
  }
}

/**
 * 检查输入的身份证号是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 */
function checkCard(str){
  //15位数身份证正则表达式
  var arg1 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
  //18位数身份证正则表达式
  var arg2 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[A-Z])$/;
  if (str.match(arg1) == null && str.match(arg2) == null) {
    return false;
  }
  else {
    return true;
  }
}

/**
 * 检查输入的IP地址是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 */
function checkIP(str){
  var arg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
  if (str.match(arg) == null) {
    return false;
  }
  else {
    return true;
  }
}

/**
 * 检查输入的URL地址是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 */
function checkURL(str){
  if (str.match(/(http[s]?|ftp):\/\/[^\/\.]+?\..+\w$/i) == null) {
    return false
  }
  else {
    return true;
  }
}

/**
 * 检查输入的字符是否具有特殊字符
 * 输入:str 字符串
 * 返回:true 或 flase; true表示包含特殊字符
 * 主要用于注册信息的时候验证
 */
function checkQuote(str){
  var items = new Array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "{", "}", "[", "]", "(", ")");
  items.push(":", ";", "'", "|", "\\", "<", ">", "?", "/", "<<", ">>", "||", "//");
  items.push("admin", "administrators", "administrator", "管理员", "系统管理员");
  items.push("select", "delete", "update", "insert", "create", "drop", "alter", "trancate");
  str = str.toLowerCase();
  for (var i = 0; i < items.length; i++) {
    if (str.indexOf(items[i]) >= 0) {
      return true;
    }
  }
  return false;
}


/**************************************************************************************/
/*************************************时间的验证*****************************************/
/**************************************************************************************/

/**
 * 检查日期格式是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 * 注意:此处不能验证中文日期格式
 * 验证短日期(2007-06-05)
 */
function checkDate(str){
  //var value=str.match(/((^((1[8-9]\d{2})|([2-9]\d{3}))(-)(10|12|0?[13578])(-)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(11|0?[469])(-)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(0?2)(-)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(-)(0?2)(-)(29)$)|(^([3579][26]00)(-)(0?2)(-)(29)$)|(^([1][89][0][48])(-)(0?2)(-)(29)$)|(^([2-9][0-9][0][48])(-)(0?2)(-)(29)$)|(^([1][89][2468][048])(-)(0?2)(-)(29)$)|(^([2-9][0-9][2468][048])(-)(0?2)(-)(29)$)|(^([1][89][13579][26])(-)(0?2)(-)(29)$)|(^([2-9][0-9][13579][26])(-)(0?2)(-)(29)$))/);
  var value = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  if (value == null) {
    return false;
  }
  else {
    var date = new Date(value[1], value[3] - 1, value[4]);
    return (date.getFullYear() == value[1] && (date.getMonth() + 1) == value[3] && date.getDate() == value[4]);
  }
}

/**
 * 检查时间格式是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 * 验证时间(10:57:10)
 */
function checkTime(str){
  var value = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/)
  if (value == null) {
    return false;
  }
  else {
    if (value[1] > 24 || value[3] > 60 || value[4] > 60) {
      return false
    }
    else {
      return true;
    }
  }
}

/**
 * 检查全日期时间格式是否正确
 * 输入:str 字符串
 * 返回:true 或 flase; true表示格式正确
 * (2007-06-05 10:57:10)
 */
function checkFullTime(str){
  //var value = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
  var value = str.match(/^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/);
  if (value == null) {
    return false;
  }
  else {
    //var date = new Date(checkFullTime[1], checkFullTime[3] - 1, checkFullTime[4], checkFullTime[5], checkFullTime[6], checkFullTime[7]);
    //return (date.getFullYear() == value[1] && (date.getMonth() + 1) == value[3] && date.getDate() == value[4] && date.getHours() == value[5] && date.getMinutes() == value[6] && date.getSeconds() == value[7]);
    return true;
  }
  
}




/**************************************************************************************/
/************************************身份证号码的验证*************************************/
/**************************************************************************************/

/** 
 * 身份证15位编码规则:dddddd yymmdd xx p
 * dddddd:地区码
 * yymmdd: 出生年月日
 * xx: 顺序类编码,无法确定
 * p: 性别,奇数为男,偶数为女
 * <p />
 * 身份证18位编码规则:dddddd yyyymmdd xxx y
 * dddddd:地区码
 * yyyymmdd: 出生年月日
 * xxx:顺序类编码,无法确定,奇数为男,偶数为女
 * y: 校验码,该位数值可通过前17位计算获得
 * <p />
 * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]
 * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]
 * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )
 * i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置
 *
 */
var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];// 加权因子  
var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];// 身份证验证位值.10代表X  
function IdCardValidate(idCard){
  idCard = trim(idCard.replace(/ /g, ""));
  if (idCard.length == 15) {
    return isValidityBrithBy15IdCard(idCard);
  }
  else 
    if (idCard.length == 18) {
      var a_idCard = idCard.split("");// 得到身份证数组  
      if (isValidityBrithBy18IdCard(idCard) && isTrueValidateCodeBy18IdCard(a_idCard)) {
        return true;
      }
      else {
        return false;
      }
    }
    else {
      return false;
    }
}

/** 
 * 判断身份证号码为18位时最后的验证位是否正确
 * @param a_idCard 身份证号码数组
 * @return
 */
function isTrueValidateCodeBy18IdCard(a_idCard){
  var sum = 0; // 声明加权求和变量  
  if (a_idCard[17].toLowerCase() == 'x') {
    a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作  
  }
  for (var i = 0; i < 17; i++) {
    sum += Wi[i] * a_idCard[i];// 加权求和  
  }
  valCodePosition = sum % 11;// 得到验证码所位置  
  if (a_idCard[17] == ValideCode[valCodePosition]) {
    return true;
  }
  else {
    return false;
  }
}

/** 
 * 通过身份证判断是男是女
 * @param idCard 15/18位身份证号码
 * @return 'female'-女、'male'-男
 */
function maleOrFemalByIdCard(idCard){
  idCard = trim(idCard.replace(/ /g, ""));// 对身份证号码做处理。包括字符间有空格。  
  if (idCard.length == 15) {
    if (idCard.substring(14, 15) % 2 == 0) {
      return 'female';
    }
    else {
      return 'male';
    }
  }
  else 
    if (idCard.length == 18) {
      if (idCard.substring(14, 17) % 2 == 0) {
        return 'female';
      }
      else {
        return 'male';
      }
    }
    else {
      return null;
    }
}

/** 
 * 验证18位数身份证号码中的生日是否是有效生日
 * @param idCard 18位书身份证字符串
 * @return
 */
function isValidityBrithBy18IdCard(idCard18){
  var year = idCard18.substring(6, 10);
  var month = idCard18.substring(10, 12);
  var day = idCard18.substring(12, 14);
  var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
  // 这里用getFullYear()获取年份,避免千年虫问题  
  if (temp_date.getFullYear() != parseFloat(year) ||
  temp_date.getMonth() != parseFloat(month) - 1 ||
  temp_date.getDate() != parseFloat(day)) {
    return false;
  }
  else {
    return true;
  }
}

/** 
 * 验证15位数身份证号码中的生日是否是有效生日
 * @param idCard15 15位书身份证字符串
 * @return
 */
function isValidityBrithBy15IdCard(idCard15){
  var year = idCard15.substring(6, 8);
  var month = idCard15.substring(8, 10);
  var day = idCard15.substring(10, 12);
  var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
  // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法  
  if (temp_date.getYear() != parseFloat(year) ||
  temp_date.getMonth() != parseFloat(month) - 1 ||
  temp_date.getDate() != parseFloat(day)) {
    return false;
  }
  else {
    return true;
  }
}

//去掉字符串头尾空格  
function trim(str){
  return str.replace(/(^\s*)|(\s*$)/g, "");
}

以上就是本文的全部内容,了解更多JavaScript的语法,大家可以查看:《JavaScript 参考教程》、《JavaScript代码风格指南》,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
限制textbox或textarea输入字符长度的JS代码
Oct 16 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
JS Loading功能的简单实现
Nov 29 Javascript
jquery转盘抽奖功能实现
Nov 13 Javascript
Jquery easyui开启行编辑模式增删改操作
Jan 14 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
Aug 31 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
原生JS实现圆环拖拽效果
Apr 07 Javascript
React学习之受控组件与数据共享实例分析
Jan 06 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 #Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 #Javascript
jQuery 中ajax异步调用的四种方式
Jun 28 #Javascript
jQuery 调用WebService 实例讲解
Jun 28 #Javascript
关于在Servelet中如何获取当前时间的操作方法
Jun 28 #Javascript
关于JS 预解释的相关理解
Jun 28 #Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 #Javascript
You might like
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
JavaScript简介
2015/02/15 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
原生JS轮播图插件
2017/02/09 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python学习资料
2007/02/08 Python
python实现的各种排序算法代码
2013/03/04 Python
python实现根据图标提取分类应用程序实例
2014/09/28 Python
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
对pandas中to_dict的用法详解
2018/06/05 Python
python线程信号量semaphore使用解析
2019/11/30 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
python speech模块的使用方法
2020/09/09 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
德国高尔夫商店:Par71.de
2020/11/29 全球购物
餐饮商业计划书范文
2014/04/29 职场文书
校外活动方案
2014/08/28 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
英语教师个人总结
2015/02/09 职场文书
同学聚会通知书
2015/04/20 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
党员个人承诺书
2015/04/27 职场文书
SQL Server Agent 服务无法启动
2022/04/20 SQL Server