使用正则表达式格式化 ssn

joh*_*ohn 3 c# regex asp.net

嗨,我需要 cSharp 中的正则表达式以 xxx-xx-6789 格式显示 SSN。即 123456789 应在文本字段中显示为 xxx-xx-6789。我现在使用的代码是

string SSN = "123456789";
Regex ssnRegex = new Regex("(?:[0-9]{3})(?:[0-9]{2})(?:[0-9]{4})");
string formattedSSN = ssnRegex.Replace(SSN, "XXX-XX-${last}");
Run Code Online (Sandbox Code Playgroud)

什么是正确的 Reg 表达式来屏蔽 ssn xxx-xx-6789 ?

Ahm*_*eed 5

last在替换字符串中用作命名组,而没有在模式中指定它。

按如下方式更新您的模式,您现有的代码应该可以工作:

(?:[0-9]{3})(?:[0-9]{2})(?<last>[0-9]{4})
Run Code Online (Sandbox Code Playgroud)

根据您的输入,您可能希望通过分别使用^$元字符匹配字符串的开头和结尾来限制模式以匹配整个输入。通过这样做,正则表达式将不会匹配超过 9 个连续数字的输入。这看起来像:

^(?:[0-9]{3})(?:[0-9]{2})(?<last>[0-9]{4})$
Run Code Online (Sandbox Code Playgroud)

此外,由于您只关心最后 4 位数字,因此您可以选择匹配 5 个数字,然后匹配 4 个数字,而不是将其分成 3 组:

^(?:[0-9]{5})(?<last>[0-9]{4})$
Run Code Online (Sandbox Code Playgroud)

此外,如果您的输入始终是 9 个数字并且可以信任,则不需要正则表达式。您可以简单地获取子字符串以提取最后 4 个字符:

string SSN = "123456789";
string formattedSSN = "XXX-XX-" + SSN.Substring(SSN.Length - 4, 4);
Run Code Online (Sandbox Code Playgroud)