您当前的位置:首页 > 互联网教程

身份证号码的正则表达式及验证详解(JavaScript,Regex)

发布时间:2025-05-25 07:41:11    发布人:远客网络

一、身份证号码的正则表达式及验证详解(JavaScript,Regex)

在进行用户实名验证时,常需利用身份证号码的正则表达式及校验方案。本文提供两种方案,使用者可依据项目需求选择适用方案。

身份证号码由十七位数字构成,包括地址码、出生日期码、顺序码与校验码。以北京市朝阳区女性身份证号码为例,其结构如下图所示。

方案1采用分步验证方法,设定如下规则:

1.1地址码规则:正则表达式为/^[1-9]\d{5}/。

1.2年份码规则:正则表达式为/(18|19|20)\d{2}/。若无需18开头年份,可去除18。

1.3月份码规则:正则表达式为/((0[1-9])|(1[0-2]))/。

1.4日期码规则:正则表达式为/(([0-2][1-9])|10|20|30|31)/。

1.5顺序码规则:正则表达式为/\d{3}/。

1.6校验码规则:正则表达式为/[0-9Xx]/。

方案1正则表达式整合如下,并附有测试程序。

方案2则在方案1基础上,引入省级地址码校验,提升验证准确性。并提供出生日期码校验、校验码校验的函数与测试程序。校验码计算较为复杂,公式如下所示:

公式:其中 ai表示身份证本体码的第 i位值,Wi表示第 i位的加权因子值。

校验码计算程序与测试代码如下。

以上内容系三胖对身份证号码验证的理解与分析,如有不妥之处,请指正。

二、formValidator中的RegexValidator属性regexp有哪些参数啊

1、regexp正则表达式""采用的是显式构造函数new RegExp("pattern"[,"flags"]);由于Javascript中'\'被用作转义字符,所以在使用显示构造函数构造实例对象的时候,需要使用'\\'代替'\'

2、param附加参数"i" g:代表可以进行全局匹配。

3、可以任意组合,当然也可以不加参数

4、onerror:发生错误的提示"输入错误"

5、<script type="text/javascript">

6、$.formValidator.initConfig({onError:function(){alert("校验没有通过,具体错误请看错误提示")}});

7、$("#test1").formValidator({onshow:"请输入用户名",onfocus:"用户名至少6个字符,最多10个字符",oncorrect:"恭喜你,你输对了"}).InputValidator({min:6,max:10,onerror:"你输入的用户名非法,请确认"});

8、$("#test2").formValidator({onshow:"请选择你的兴趣爱好(至少选择3个,最多选择5个)",onfocus:"你至少选择3个,最多选择5个",oncorrect:"恭喜你,你选对了"}).InputValidator({min:3,max:5,onerror:"你选的个数不对(至少选择3个,最多选择5个)"});

9、$("#test3").formValidator({onshow:"请选择你的兴趣爱好(至少选一个)",onfocus:"你至少选择1个",oncorrect:"恭喜你,你选对了"}).InputValidator({min:1,onerror:"你选的个数不对"});

10、$("#xueli").formValidator({onshow:"请选择你的学历",onfocus:"学历必须选择",oncorrect:"谢谢你的配合"}).SelectValidator({onerror:"你是不是忘记选择学历了!"});

11、$("#password1").formValidator({onshow:"请输入密码",onfocus:"两次密码必须一致哦",oncorrect:"密码一致"}).InputValidator({min:1,onerror:"密码不能为空,请确认"}).CompareValidator({desID:"password2",operateor:"=",onerror:"2次密码不一致,请确认"});

12、$("#nl").formValidator({onshow:"请输入的年龄(1-99岁之间)",onfocus:"只能输入1-99之间的数字哦",oncorrect:"恭喜你,你输对了"}).InputValidator({min:1,max:99,type:"value",onerror:"年龄必须在1-99之间,请确认"});

13、$("#aiguo").formValidator({onshow:"爱国的人一定要选哦",onfocus:"你得认真思考哦",oncorrect:"不知道你爱不爱,反正你是选了"}).InputValidator({min:1,max:1,onerror:"难道你不爱国?你给我选!!!!"});

14、$("#shouji").formValidator({empty:true,onshow:"请输入你的手机号码,可以为空哦",onfocus:"你要是输入了,必须输入正确",oncorrect:"谢谢你的合作",onempty:"你真的不想留手机号码啊?"}).InputValidator({min:11,max:11,onerror:"手机号码必须是11位的,请确认"}).RegexValidator({regexp:"^[1][0-9]{10}$",onerror:"你输入的手机格式不正确"});

15、$("#lxdh").formValidator({empty:true,onshow:"请输入你的联系电话,可以为空哦",onfocus:"你要是输入了,必须输入正确,格式例如:0577-88069620",oncorrect:"谢谢你的合作",onempty:"你真的不想留联系电话了吗?"}).RegexValidator({regexp:"^[[0-9]{3}-|\[0-9]{4}-]?(\[0-9]{8}|[0-9]{7})?$",onerror:"你输入的联系电话格式不正确"});

16、$("#ms").formValidator({onshow:"请输入你的描述",onfocus:"描述至少要输入10个汉字或20个字符",oncorrect:"恭喜你,你输对了"}).InputValidator({min:20,onerror:"你输入的描述长度不正确,请确认"});

三、JavaScript 正则表达式匹配汉字

在JavaScript中,正则表达式匹配汉字的传统方法是`/[\u4e00-\u9fa5]/`,这个正则从1992年至1999年间准确匹配了Unicode 1.0.1版本收录的中日韩统一表意文字。然而,随着Unicode的更新,这个正则不再覆盖所有新增的汉字。在2018年及以后,我们需要更现代的方法来处理汉字匹配。

Unicode 2018年引入的`\p`和`\u`标志提供了解决方案。`\p{Unified_Ideograph}`匹配所有统一表意文字,它根据字符的Unicode属性进行匹配,无需关注具体编码范围,开发者无需关注汉字的具体Unicode码点。这种方法更便于维护,因为它的底层实现由运行时依赖的Unicode版本决定。

`\p{Ideographic}`虽然也用于匹配汉字,但它包括了额外的非汉字字符,如西夏文、女书和兼容性字符,使用时需要谨慎。`Script=Han`属性则用于匹配汉文字符集,包括部首和符号,与汉字的概念有所混淆。

在JavaScript中,为了兼容性,Chrome 64及以上版本支持`\p`属性,而较旧版本可能需要借助`@babel/env`或`babel-plugin-proposal-unicode-property-regex`进行转译。`pattern`属性在HTML中使用时,需要施加`unicode`标志,以确保匹配所有Unicode字符。

总结来说,为了匹配最新的Unicode汉字,建议使用`\p{Unified_Ideograph}`或通过转译确保正则表达式的兼容性。参考了Unicode 10.0.0的详细信息和相关标准,如UAX#44和#24,以及HTML和Angular的规范。