首页 > 解决方案 > 如何在 C# 中编写多条件 SSN 正则表达式

问题描述

当通过我们的应用程序的一部分提交社会安全号码时,我正在尝试使用正则表达式来掩盖。我们被告知要检查的条件是 SSN 是否以 123-45-6789 或 123 45 6789 发送(仅查找 3(空格或破折号)2 位(空格或破折号)3 位数字。

到目前为止我所拥有的:

Regex regex = new Regex("\d{3}-\d{2}-\d{4}");

var replacement = regex.Replace(comments, "SSN Hidden");

所以我知道正则表达式很接近,但对于破折号是不正确的,我需要帮助弄清楚如何合并空格。正则表达式的新手,在此先感谢。

标签: c#regex

解决方案


我建议使用

var replacement = Regex.Replace(comments, @"\d{3}([- ])\d{2}\1\d{4}", "SSN Hidden");

如果您需要将这些数字作为整个单词进行匹配,请考虑在模式 ( ) 周围使用单词边界。 或者,使用环视来确保两端没有其他数字:.\b@"\b\d{3}([- ])\d{2}\1\d{4}\b"@"(?<!\d)\d{3}([- ])\d{2}\1\d{4}(?!\d)"

\d仅匹配 ASCII 数字,请考虑传递RegexOptions.ECMAScript选项.

细节

  • \d{3} - 三位数
  • ([- ])-捕获组1:空格或-
  • \d{2}- 两位数
  • \1- 对第 1 组值的反向引用(因此,它是或者是-空格)
  • \d{4}- 四位数。

请参阅正则表达式演示


推荐阅读