SSN和9位数字筛选目前正在捕捉许多变量

时间:2018-04-11 19:07:32

标签: regex

这是使用的2个正则表达式。第一个是带有分隔符的SSN类型号,第二个是直接的9位数字,用于检查前后字符。

正则表达式( “\ d {1} \ d {3} \ d {1} \ d {2} \ d {1} \ d {4} \ d {1}”)

正则表达式(“\ D {1} \ d {9} \ D {1}”)

问题是我们捕获的其他条目类似于那些,但我们需要足够具体,这些条目不会被捕获。

如 -

(xxxx)xxx-xx-xxxx

684072943(和订单号等)

FA300217F0090

潜在比赛#1:--------------- nt:ex:201 [[71230 0821]]上午:201 [[71230 0821]]上午6月26日 - -------------潜在比赛#2:---------------上午:201 [[71230 0821]]上午6月26日DTG(日期)时间组)

“[[210v13:2012]],”

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你的前提有点不正确。你想要匹配9位数吗?因为684072943是九位数。 (xxxx)xxx-xx-xxxx也将是正确的SSN格式,但是你说它是无效的,因为它之前的某些东西,这在某种程度上是一个延伸(并且很难,如果不是不可能的话,用regex验证) 。 FA300217F0090根本不匹配任何东西。 210v13:2012最终可能会匹配,但可以解决这个问题。

也许您应该首先考虑使用正确的3-2-4格式(分隔)的'SSN类型'。

你可以try,说:

List

我们在模式的边缘使用单词边界,然后使用ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<ArrayList<Integer>>(); arrayLists.add(new ArrayList<Integer>()); arrayLists.get(0).add(100); arrayLists.get(0).add(50); arrayLists.add(new ArrayList<Integer>()); arrayLists.get(1).add(67); System.out.println(arrayLists.get(0).get(0)); // 100 System.out.println(arrayLists.get(0).get(1)); // 50 System.out.println(arrayLists.get(1).get(0)); // 67 反向引用分隔符,以保证它们是相同的字符。我不确定是否允许任何非数字分隔符,而不仅仅是短划线/空格等,但这样做会。

最后,我用谷歌搜索,这个主题似乎是on the 'net already,为什么重新发明轮子?