Home  >  Article  >  Backend Development  >  一个正则表达式的有关问题,数字的个数写1就可以匹配下,写比1大的就匹配不下了

一个正则表达式的有关问题,数字的个数写1就可以匹配下,写比1大的就匹配不下了

WBOY
WBOYOriginal
2016-06-13 12:52:29958browse

一个正则表达式的问题,数字的个数写1就可以匹配上,写比1大的就匹配不上了。
正则如下:

<br />
$patten='/^[1-9]\d{5}[1-2]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/';//就是最后这个4<br />


如果把最后那个4改成1,就能匹配的上,改成比1大的就不行了

这个正则是想用来匹配身份证号码的,如果哪位大侠有的话希望能发出来借鉴一下~兼容15位和18位的~


------解决方案--------------------
1、身份证号码含义:
一代(现已淘汰,不必判断了)
地区代码(6位)出生年(2位)出生月(2位)出生日(2位)顺号(3位) 共15位
二代
地区代码(6位)出生年(4位)出生月(2位)出生日(2位)顺号(3位)校验位(1位) 共18位
校验位可能是 X
2、简单判定,只需判断位数是否正确即可
/^\d{15}(?:\d{2}[\dX])?$/
3、精确判定(二代)应使用校验码生成算法。各种语言的“身份证校验码生成函数”都可以在网上找到

------解决方案--------------------
validateidnumber( "22111111111234563" );

用字符串,数值的话就越界了
本来身份证号就应该是字符串

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article: CI框架源码翻阅-URI.php Next article: php筹建及基础