黑马程序员技术交流社区

标题: 正则表达式 [打印本页]

作者: 悦动天下    时间: 2014-11-21 22:30
标题: 正则表达式
判断一个字符串是不是身份证号码,即是否是15或18位数字。(黑马下的基础题,望哪位解答下)
作者: javaAndroid    时间: 2014-11-21 23:39
[1-9]\\d{14}([\\d]{2}[\\dxX])?
作者: 黑马黄武先    时间: 2014-11-22 02:33
本帖最后由 黑马黄武先 于 2014-11-22 03:00 编辑

最好是定义数组来判断吧

作者: 依米阳光    时间: 2014-11-22 04:01
像这种常规的验证网上一般都有,主要得自己理解是怎么匹配的,以后即使有不同的需求自己也会写。
作者: Eagle    时间: 2014-11-22 06:55
"[1-9]\\d{13,16}[\\dxX]"
没有更细腻的划分了 ,太细腻就太麻烦了。。。还得考虑中间的日期。后面的数字组成,前面开头的地区不同。。
身份证号码的组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第18位为校验码,作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

"[1-9]\\d{13,16}[\\dxX]"
解释下这个简单的正则:开头不能是0的数字.后面可以是13-16位数字。最后面一个可以是数字,也可以是大小写的X。组合起来就是15-18位的身份证号码了。
作者: jdedffjef83j    时间: 2014-11-24 22:09
[0-9]{15,18}
作者: 悦动天下    时间: 2014-11-27 19:27
Eagle 发表于 2014-11-22 06:55
"[1-9]\\d{13,16}[\\dxX]"
没有更细腻的划分了 ,太细腻就太麻烦了。。。还得考虑中间的日期。后面的数字组 ...

恩恩,谢谢了
作者: 悦动天下    时间: 2014-11-27 19:28
依米阳光 发表于 2014-11-22 04:01
像这种常规的验证网上一般都有,主要得自己理解是怎么匹配的,以后即使有不同的需求自己也会写。 ...

恩,说的也是啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2