其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

正则表达式只能是 0,01,02,03,04,05,06,99的 数字

GG网络技术分享 2025-03-18 16:15 3


问题描述:

还有0,1,2,3,4,99的数字
求大神帮助求大神帮助求大神帮助求大神帮助求大神帮助求大神帮助求大神帮助

网友观点:

/^(?:0[1-6]?|[1-4]|99)$/

感觉毫无规则啊,建议使用数组

r\'^0[1-6]?$|99$\'

验证身份证号的正则表达式

正则表达式是个好工具。不管对程序员,还是对数据分析人员,正则是非常重要的技能。它的作用有点像瑞士军刀,在一些文本匹配、文本校验的情景下,一行正则表达式,往往胜过几十行代码的作用。

比如今天探讨的验证身份证号,怎么知道一串字符是不是有效的身份证号呢?

按照身份证号的编码规则

15位身份证号排列顺序从左到右依次为:6位数字地址编码,6位数字出生日期编码,2位出生顺序编号,1位性别标号(奇数为男性,偶数为女性)。

18位身份证号由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:6位数字地址编码,8位数字出生日期编码,3位数字顺序码和1位数字校验码。

身份证号如果严格校验,要求比较多:

  • 最简单的规则:长度等于15位或18位
  • 追加规则:数字地址编码要有效,如 110106这种地址编码是有效的,但010018是无效的,因为每两位代表一级编码,表示所在省、市、县,省编码不会以0开头,00不可能是有效的市编码
  • 追加规则:日期要有效。像19880331就是无效的,3月不会有31号
  • 追加规则:日期要考虑闰年
  • 还有18位后面追加字母的也得判断
  • ……

是不是很头大?

这些逻辑如果用普通的编程方法,估计每个几百行代码是搞不定的,但在强大的正则面前,这都不是事!

以下是实际中用过的正则写法。我嵌入SQL的时候,是吧下面四种逻辑合到一个正则里去的,为了方便阅读,拆成四个来说明,当然也并非完美结果,如果有更好写法还请给予指导,先谢过啦!


18位非闰年

^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9XxAa]$


18位闰年

^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9XxAa]$


15位非闰年

^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$


15位闰年

^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$

标签:

提交需求或反馈

Demand feedback