gpt4 book ai didi

regex - SSN 中没有重复序列(例如 123-12-3123)

转载 作者:行者123 更新时间:2023-12-04 06:28:01 25 4
gpt4 key购买 nike

您如何通过正则表达式排除 SSN 的重复序列?

例如,以下值将被禁止:

    123-12-3123
456-45-6456
789-78-9789

更新

What constitutes repeating? *Does* 121-233-4444 count?



好问题,但不是;至少现在还没有。我是代码猴子,负责填写 A&D 的请求,而 A&D 则负责完成客户的请求。

他们特别要求修复以防止用户输入重复 3 次的 3 个数字序列。最常见的是上面列出的那些。

What language are you using?



javascript

此外,我将这个正则表达式附加到一个现有的 REGEX 上,该 REGEX 深埋在具有数千名用户的企业级应用程序中。添加代码是可能的,但并不理想。

最佳答案

你的问题不清楚。我假设你想要 xyz-xy-zxyz 其中 x+1 = yy+1 = z

没有好的答案。

蛮力:

/
^
(?: 012-01-2012
| 123-12-3123
| 234-23-4234
| 345-34-5345
| 456-45-6456
| 567-56-7567
| 678-67-8678
| 789-78-9789
)
\z
/x

以上可以动态构建:
my @alts;
for (0..7) {
my ($x, $y, $z) = ($_+0, $_+1, $_+2);
push @alts, "$x$y$z-$x$y-$z$x$y$z";
}

my $alt = join('|', @alts);

/^(?:$alt)\z/

无需验证,因此可以使用:
/
^
(?: 01-?2-? | 12-?3-? | 23-?4-? | 34-?5-?
| 45-?6-? | 56-?7-? | 67-?8-? | 78-?9-?
){3}
\z
/x

如果您的编程语言可以选择嵌入代码:
/
^
( [0-7] )
( (??{ $1+1 }) )
( (??{ $1+2 }) )
-
\1 \2
-
\3 \1 \2 \3
\z
/x

你可以扩大你的网络:
/
^
( [0-9] )( [0-9] )( [0-9] )
-
\1 \2
-
\3 \1 \2 \3
\z
/x

如果您不想扩大网络,您还可以使用正则表达式之外的代码:
/
^
( [0-7] )
( [1-8] )
( [1-9] )
-
\1 \2
-
\3 \1 \2 \3
\z
/x && $2 == $1+1 && $3 == $2+1

然后是这个:
s/-//g;
/
^
(?: 012 | 123 | 234 | 345
| 456 | 567 | 678 | 789
){3}
\z
/x

为简单起见,我强烈建议您在进行检查之前删除非数字。
/^[0-9]{3}-[0-9]{2}-[0-9]{4}\z/
or die;

s/-//g;

... check here...

关于regex - SSN 中没有重复序列(例如 123-12-3123),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com