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 相关文章推荐
Domino中运用jQuery读取视图内容的方法
Oct 21 Javascript
ExtJS 下拉多选框lovcombo
May 19 Javascript
GreyBox技术总结(转)
Nov 23 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
JavaScript生成随机字符串的方法
Mar 19 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
原生js实现鼠标跟随效果
Feb 28 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 Javascript
Bootstrap Table 搜索框和查询功能
Nov 30 Javascript
详解vue-cli@2.x项目迁移日志
Jun 06 Javascript
原生JS实现相邻月份日历
Oct 13 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JS扩展方法实例分析
2015/04/15 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
基于node实现websocket协议
2016/04/25 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python找出完数的方法
2018/11/12 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
Python datetime包函数简单介绍
2019/08/28 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
python调用win32接口进行截图的示例
2020/11/11 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS