gpt4 book ai didi

c# - 如何在 .net 中屏蔽信用卡号的前 6 位和后 4 位

转载 作者:行者123 更新时间:2023-12-03 08:56:45 25 4
gpt4 key购买 nike

我对正则表达式非常陌生,我正在尝试使用正则表达式将对话中的信用卡号码转换为 492900*****2222 之类的内容

由于它可以来自任何对话,它旁边可能包含字符串或可能具有不一致的格式,因此基本上以下所有内容都应格式化为上面的示例:

  • 您好,我的号码是492900001111222
  • 号码是 4929000011112222 可以吗?
  • 4929 0000 1111 2222
  • 4929-0000-1111-2222

它需要是一个正则表达式,用于提取捕获组,然后我将能够使用 MatchEvaluator 将不是前 6 和后 4 的所有数字(不包括非数字)转换为 *

我在这里看到了很多有关 PHP 和 JS 堆栈溢出的示例,但没有一个可以帮助我解决这个问题。

任何指导将不胜感激

更新

我需要扩展现有的实现,该实现使用 MatchEvaluator 来屏蔽不是前 6 个或最后 4 个字符的每个字符,理想情况下我不想更改 MatchEvaluator,只是根据正则表达式使屏蔽变得灵活,请参阅此例如https://dotnetfiddle.net/J2LCo0

更新2

@Matt.G 和 @CAustin 的答案确实解决了我的要求,但我遇到了另一个障碍,我不能让它如此严格。最终捕获的组只需要考虑数字,因此保持输入文本的格式。例如:

如果我的卡号中的某些类型是 99 9988 8877776666,则评估的输出应为 99 9988 ******666666

或者我的卡号是 9999-8888-7777-6666 它应该输出 9999-88**-****-6666。

这可能吗?

更改了列表以包含我的单元测试中的项目 https://dotnetfiddle.net/tU6mxQ

最佳答案

尝试正则表达式:(?<=\d{4}\d{2})\d{2}\d{4}(?=\d{4})|(?<=\d{4}( |-)\d{2})\d{2}\1\d{4}(?=\1\d{4})

Regex Demo

C# Demo

说明:

2 alternative regexes
(?<=\d{4}\d{2})\d{2}\d{4}(?=\d{4}) - to handle cardnumbers without any separators (- or <space>)
(?<=\d{4}( |-)\d{2})\d{2}\1\d{4}(?=\1\d{4}) - to handle cardnumbers with separator (- or <space>)

1st Alternative (?<=\d{4}\d{2})\d{2}\d{4}(?=\d{4})
Positive Lookbehind (?<=\d{4}\d{2}) - matches text that has 6 digits immediately behind it
\d{2} matches a digit (equal to [0-9])
{2} Quantifier — Matches exactly 2 times
\d{4} matches a digit (equal to [0-9])
{4} Quantifier — Matches exactly 4 times
Positive Lookahead (?=\d{4}) - matches text that is followed immediately by 4 digits
Assert that the Regex below matches
\d{4} matches a digit (equal to [0-9])
{4} Quantifier — Matches exactly 4 times

2nd Alternative (?<=\d{4}( |-)\d{2})\d{2}\1\d{4}(?=\1\d{4})

Positive Lookbehind (?<=\d{4}( |-)\d{2}) - matches text that has (4 digits followed by a separator followed by 2 digits) immediately behind it
1st Capturing Group ( |-) - get the separator as a capturing group, this is to check the next occurence of the separator using \1
\1 matches the same text as most recently matched by the 1st capturing group (separator, in this case)
Positive Lookahead (?=\1\d{4}) - matches text that is followed by separator and 4 digits

关于c# - 如何在 .net 中屏蔽信用卡号的前 6 位和后 4 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813746/

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