【发布时间】:2019-07-15 18:15:12
【问题描述】:
我对正则表达式非常陌生,我正在尝试使用正则表达式将一个信用卡号转换为 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
【问题讨论】:
-
到目前为止你尝试了什么?
-
模式要求是什么?
标签: c# asp.net .net regex security