正则表达的功课

时间:2017-05-26 08:20:01

标签: java regex

这是我初级班的一些作业。

  

组织已为所有客户分配了身份证号码。身份证号码格式如下:

     
      
  • 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

2 个答案:

答案 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]):以10149

之间的数字开头

\d{3}:后跟一个空格和3位

\d{3}\b:再次

|150 000 000:为了接受值150 000 000

请注意,我只接受字符,而不是所有空格。您可能希望按更改所有\s,这取决于您的需求。

Test it on regex101

答案 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}$),然后删除空格并对最后一次限制进行常规数字检查。