这是我初级班的一些作业。
组织已为所有客户分配了身份证号码。身份证号码格式如下:
- 2个数字字符(不带前导0的数字),后跟3个数字字符(数字)和3个数字字符(数字),用单个空格分隔
或3个数字字符(不带前导0的数字)后跟3个数字字符(数字)和3个数字字符(数字),用单个空格分隔。
任何数字< 10 000 000或> 150 000 000无效。
这是我的尝试:
([\\d]{2}[\\s][\\d]{3}[\\s][\\d]{3})|([\\d]{3}[\\s][\\d]{3}[\\s][\\d]{3})
但是,以下输出不起作用,但确实如下:
153 394 111
943 293 492
098 302 203
感谢任何帮助。谢谢
以下是有效的输入:
11 304 982
39 683 234
139 920 393
以下是无效输入:
153 394 111
3 394 234
89 909 98
答案 0 :(得分:2)
这是一个建议:
\b(1[0-4][1-9]|[1-9]\d) \d{3} \d{3}\b|150 000 000
匹配:
11 304 982
39 683 234
139 920 393
150 000 000
并排除:
153 349 111
053 394 111
3 394 234
89 909 98
\b([1-9]\d|1[0-4][1-9])
:以10
和149
\d{3}
:后跟一个空格和3位
\d{3}\b
:再次
|150 000 000
:为了接受值150 000 000
请注意,我只接受字符,而不是所有空格。您可能希望按
更改所有
\s
,这取决于您的需求。
答案 1 :(得分:2)
您可以使用^(?:(?:1[0-4]|[1-9])\d \d{3} \d{3}|150 000 000)$
检查您的身份证号码。请注意,如果将其与.matches
函数一起使用,则可以省略锚点,并且必须在java字符串文字中加倍反斜杠。
(?:1[0-4]|[1-9])\d
检查以1-9开头的2位数字(0无效)或以10-14开头的3位数字来计算价值限制。
可悲的是,只有大于150 000 000
的数字无效,因此150 000 000
本身不是 - 因此最后一次更改。
另一种方法可能是检查整体格式(例如^[1-9]\d\d? \d{3} \d{3}$
),然后删除空格并对最后一次限制进行常规数字检查。