JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】


Posted in Javascript onJanuary 22, 2017

本文实例总结了JS常见简单正则表达式验证功能。分享给大家供大家参考,具体如下:

下面都是一些比较常用简单的验证,像那些特殊的复杂的情况这里不进行考虑

1、验证电话号码或者手机号码

/**
 * 验证电话号码(手机号码+电话号码)
 * @param obj
 * @returns {Boolean}
 */
function checkPhoneNum(obj){
  if(/^((\d{3}-\d{8}|\d{4}-\d{7,8})|(1[3|5|7|8][0-9]{9}))$/.test(obj)){
    return true;
  }
}

2、验证地址(中文、英文、数字)

/**
 * 验证企业地址(中文、英文、数字)
 * @param obj
 */
function checkAddress(obj){
  if(/^[\u4e00-\u9fa5a-zA-Z0-9]+$/.test(obj)){
    return true;
  }
}

3、验证用户名

/**
 * 验证用户名输入格式
 * @param obj
 * @returns {Boolean}
 */
function checkUserName(obj){
  if(/^[a-zA-Z0-9_-]{3,16}$/.test(obj)){
    return true;
  }
}

4、验证密码

/**
 * 验证密码输入格式
 * @param obj
 * @returns {Boolean}
 */
function verifyPassword(obj){
  if(/^[a-z0-9_-]{5,18}$/.test(obj)){
    return true;
  }
}

5、验证企业税号

/**
 * 验证税号
 * 15或者17或者18或者20位字母、数字组成
 * @param obj
 * @returns {Boolean}
 */
function checkTax(obj){
  if(/^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/.test(obj)){
    return true;
  }
}

6、验证金额

/**
 * 验证金额(可验证 大于等于零,小于等于99999999.99 的数字)
 * @param obj
 * @returns {Boolean}
 */
function checkMoney(obj){
  if(/^([1-9][\d]{0,7}|0)(\.[\d]{1,2})?$/.test(obj)){
    return true;
  }
}

7、验证身份证号,包括大陆身份证号,和港澳台身份证号,当然这里都只是简单的规范一下,实际的像香港的身份证号最后的括号里面的校验位都是需要根据前面的

数字依据一定的加权算法算出来进行校验的,这里没有涉及到。如果需要特别精确则可以去研究一番。

/**
 * 验证大陆的身份证号
 * 验证身份证号
 * 身份证号码为15位或18位的全数字,或者18位时前17位是数字,最后一位是校验位,可能是数字或字符X或x
 * @param obj
 */
function checkIdCard(obj){
  if(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(obj)){
    return true;
  }
}
/**
 * 验证港澳台身份证
 * @param obj
 */
function checkGATIdCard(obj){
  var reg1 = /^[A-Z]{1,2}[0-9]{6}[\(|\(]?[0-9A-Z][\)|\)]?$/;//香港格式1 (香港身份证号码结构:XYabcdef(z))
  var reg2 = /^[A-Z][0-9]{8,12}$/;//香港格式2 (H60152555)
  var reg3 = /^[1|5|7][0-9]{6}[\(|\(]?[0-9A-Z][\)|\)]?$/;//澳门,8位数,不包含出生年月 格式为 xxxxxxx(x) 注:x全为数字,无英文字母 首位数只有1、5、7字开头的
  var reg4 = /^[a-zA-Z][0-9]{9}$/;//台湾:10位字母和数字
  if(reg1.test(obj) || reg2.test(obj) || reg3.test(obj) || reg4.test(obj)){
    return true;
  }
}

下面是比较权威的验证身份证号的写法:

/**
 * 身份证15位编码规则:dddddd yymmdd xx p
 * dddddd:地区码
 * yymmdd: 出生年月日
 * xx: 顺序类编码,无法确定
 * p: 性别,奇数为男,偶数为女
 * 身份证18位编码规则:dddddd yyyymmdd xxx y
 * dddddd:地区码
 * yyyymmdd: 出生年月日
 * xxx:顺序类编码,无法确定,奇数为男,偶数为女
 * y: 校验码,该位数值可通过前17位计算获得
 * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]
 * 验证位 Y = [ 1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2 ]
 * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )
 * i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置
 *
 */
// 构造函数,变量为15位或者18位的身份证号码
function IdCardValidate(CardNo) {
 this.Valid = false;
 this.ID15 = '';
 this.ID18 = '';
 this.Local = '';
 if (CardNo != null)
  this.SetCardNo(CardNo);
}
// 设置身份证号码,15位或者18位
IdCardValidate.prototype.SetCardNo = function(CardNo) {
 this.ID15 = '';
 this.ID18 = '';
 this.Local = '';
 CardNo = CardNo.replace(" ", "");
 var strCardNo;
 if (CardNo.length == 18) {
  pattern = /^\d{17}(\d|x|X)$/;
  if (pattern.exec(CardNo) == null)
   return;
  strCardNo = CardNo.toUpperCase();
 } else {
  pattern = /^\d{15}$/;
  if (pattern.exec(CardNo) == null)
   return;
  strCardNo = CardNo.substr(0, 6) + '19' + CardNo.substr(6, 9)
  strCardNo += this.GetVCode(strCardNo);
 }
 this.Valid = this.CheckValid(strCardNo);
}
// 校验身份证有效性
IdCardValidate.prototype.IsValid = function() {
 return this.Valid;
}
// 返回生日字符串,格式如下,1981-10-10
IdCardValidate.prototype.GetBirthDate = function() {
 var BirthDate = '';
 if (this.Valid)
  BirthDate = this.GetBirthYear() + '-' + this.GetBirthMonth() + '-'
    + this.GetBirthDay();
 return BirthDate;
}
// 返回生日中的年,格式如下,1981
IdCardValidate.prototype.GetBirthYear = function() {
 var BirthYear = '';
 if (this.Valid)
  BirthYear = this.ID18.substr(6, 4);
 return BirthYear;
}
// 返回生日中的月,格式如下,10
IdCardValidate.prototype.GetBirthMonth = function() {
 var BirthMonth = '';
 if (this.Valid)
  BirthMonth = this.ID18.substr(10, 2);
 if (BirthMonth.charAt(0) == '0')
  BirthMonth = BirthMonth.charAt(1);
 return BirthMonth;
}
// 返回生日中的日,格式如下,10
IdCardValidate.prototype.GetBirthDay = function() {
 var BirthDay = '';
 if (this.Valid)
  BirthDay = this.ID18.substr(12, 2);
 return BirthDay;
}
// 返回性别,1:男,0:女
IdCardValidate.prototype.GetSex = function() {
 var Sex = '';
 if (this.Valid)
  Sex = this.ID18.charAt(16) % 2;
 return Sex;
}
// 返回15位身份证号码
IdCardValidate.prototype.Get15 = function() {
 var ID15 = '';
 if (this.Valid)
  ID15 = this.ID15;
 return ID15;
}
// 返回18位身份证号码
IdCardValidate.prototype.Get18 = function() {
 var ID18 = '';
 if (this.Valid)
  ID18 = this.ID18;
 return ID18;
}
// 返回所在省,例如:上海市、浙江省
IdCardValidate.prototype.GetLocal = function() {
 var Local = '';
 if (this.Valid)
  Local = this.Local;
 return Local;
}
//获取身份证号码为18位时最后的验证位
IdCardValidate.prototype.GetVCode = function(CardNo17) {
 var Wi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
 var Ai = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
 var cardNoSum = 0;
 for (var i = 0; i < CardNo17.length; i++)
  cardNoSum += CardNo17.charAt(i) * Wi[i];
 var seq = cardNoSum % 11;
 return Ai[seq];
}
IdCardValidate.prototype.CheckValid = function(CardNo18) {
 if (this.GetVCode(CardNo18.substr(0, 17)) != CardNo18.charAt(17))
  return false;
 if (!this.IsDate(CardNo18.substr(6, 8)))
  return false;
 var aCity = {
  11 : "北京",
  12 : "天津",
  13 : "河北",
  14 : "山西",
  15 : "内蒙古",
  21 : "辽宁",
  22 : "吉林",
  23 : "黑龙江 ",
  31 : "上海",
  32 : "江苏",
  33 : "浙江",
  34 : "安徽",
  35 : "福建",
  36 : "江西",
  37 : "山东",
  41 : "河南",
  42 : "湖北 ",
  43 : "湖南",
  44 : "广东",
  45 : "广西",
  46 : "海南",
  50 : "重庆",
  51 : "四川",
  52 : "贵州",
  53 : "云南",
  54 : "西藏 ",
  61 : "陕西",
  62 : "甘肃",
  63 : "青海",
  64 : "宁夏",
  65 : "新疆",
  71 : "台湾",
  81 : "香港",
  82 : "澳门",
  91 : "国外"
 };
 if (aCity[parseInt(CardNo18.substr(0, 2))] == null)
  return false;
 this.ID18 = CardNo18;
 this.ID15 = CardNo18.substr(0, 6) + CardNo18.substr(8, 9);
 this.Local = aCity[parseInt(CardNo18.substr(0, 2))];
 return true;
}
//验证18位数身份证号码中的生日是否是有效生日
IdCardValidate.prototype.IsDate = function(strDate) {
 var r = strDate.match(/^(\d{1,4})(\d{1,2})(\d{1,2})$/);
 if (r == null)
  return false;
 var d = new Date(r[1], r[2] - 1, r[3]);
 return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[2] && d
   .getDate() == r[3]);
}

把上面的代码放到一个js文件中,然后在(jsp)页面中引入该js文件,再调用即可

var checkIdCard = new IdCardValidate(id_card);
if(!checkIdCard.IsValid()){
  alert('您输入的身份证格式不正确!');
  return;
}
Javascript 相关文章推荐
超级强大的表单验证
Jun 26 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
动态加载dtree.js树treeview(示例代码)
Dec 17 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
JS实现网页上随机产生超链接地址的方法
Nov 09 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
Jun 13 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
Dec 14 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
Jun 13 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 Javascript
小程序红包雨的实现示例
Feb 19 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
Jan 22 #Javascript
js实现图片360度旋转
Jan 22 #Javascript
Vue 过渡(动画)transition组件案例详解
Jan 22 #Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
Jan 22 #Javascript
boostrapTable的refresh和refreshOptions区别浅析
Jan 22 #Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 #Javascript
JavaScript、C# URL编码、解码总结
Jan 21 #Javascript
You might like
隐藏你的.php文件的实现方法
2007/03/19 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
js表格分页实现代码
2009/09/18 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python获取Pandas列名的几种方法
2019/08/07 Python
python画微信表情符的实例代码
2019/10/09 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
企业趣味活动方案
2014/08/21 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
工作报告范文
2019/06/20 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
Python中time标准库的使用教程
2022/04/13 Python