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 相关文章推荐
[推荐]javascript 面向对象技术基础教程
Mar 03 Javascript
JAVASCRIPT style 中visibility和display之间的区别
Jan 22 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
May 10 Javascript
JQuery的Alert消息框插件使用介绍
Oct 09 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 Javascript
浅谈JavaScript的push(),pop(),concat()方法
Jun 03 Javascript
javascript弹出窗口中增加确定取消按钮
Jun 24 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
Node.js npm命令运行node.js脚本的方法
Oct 10 Javascript
layui switch 开关监听 弹出确定状态转换的例子
Sep 21 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
微信小程序商品详情页底部弹出框
Nov 22 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
新护士岗前培训制度
2014/02/02 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android