- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对正则表达式非常陌生,我正在尝试使用正则表达式将对话中的信用卡号码转换为 492900*****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})
说明:
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/
我是一名优秀的程序员,十分优秀!