regex 加拿大SIN(社会保险号码)

brjng4g3  于 12个月前  发布在  其他
关注(0)|答案(5)|浏览(78)

^\d{3}-\d{3}-\d{3}$匹配111-111-111
并且^\d{9}$匹配111111111
我如何编写正则表达式,使它能够找到这两个输入的匹配?

5t7ly7z5

5t7ly7z51#

使用替代方法:

^(\d{3}-\d{3}-\d{3})|(\d{9})$
5jvtdoz2

5jvtdoz22#

只是让破折号可选
^\d{3}-?\d{3}-?\d{3}$
然而,这也将允许
111-111111或111111-111
老实说,你最好去掉破折号,然后验证^\d{9}$

rkkpypqq

rkkpypqq3#

我不是Maven,但在一个快速的尝试,我来到:

^\d{3}(-|){1}\d{3}(-|){1}\d{3}$
bzzcjhmw

bzzcjhmw4#

我发现这是迄今为止最好的工作:

\b(?:\d{3}-\d{3}-\d{3})\b|\b(?:\d{3} \d{3} \d{3})\b

查找3组数字(每组3个数字)之间的连字符或空格。

8i9zcol2

8i9zcol25#

这将适用于.net,因为它支持捕获组。因此,使用捕获组来强制执行两个破折号或没有破折号的情况

^\d{3}(-?)\d{3}\1\d{3}$

由于你在注解中提到了空格,那么第一个捕获组-?就变成了[ -]?,你可以根据需要调整这个捕获组,它将继续需要平衡:

^\d{3}([- ]?)\d{3}\1\d{3}$

相关问题