2011-03-10 118 views
2

您好我需要c sharp中的正则表达式以xxx-xx-6789的格式显示SSN。即123456789应该在文本框中显示为xxx-xx-6789。我正在使用的代码是格式ssn使用正则表达式

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

什么是正确的Reg表达掩盖ssn xxx-xx-6789?

+0

string formattedSSN =“XXX-XX-”+ SSN.Substring(SSN.Length - 4,4); – tiago2014 2011-03-10 00:47:21

回答

3

您正在使用last作为替换字符串中的指定组,而未在模式中指定它。

更新您的模式如下,您现有的代码应工作:

(?:[0-9]{3})(?:[0-9]{2})(?<last>[0-9]{4}) 

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

^(?:[0-9]{3})(?:[0-9]{2})(?<last>[0-9]{4})$ 

而且,因为所有你关心的是最后4位数字,您可以选择匹配,而不是分裂它分为3组,每组5号,其次是4号,:

^(?:[0-9]{5})(?<last>[0-9]{4})$ 

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

string SSN = "123456789"; 
string formattedSSN = "XXX-XX-" + SSN.Substring(SSN.Length - 4, 4); 
+0

谢谢你它更换后的模式工作 – john 2011-03-10 01:00:03

0
string originalSSN = Convert.ToString("123-456-789").PadLeft(9, '0'); 
int maskDigit = 6; 
string maskSSN = originalSSN.Substring(originalSSN.Length - maskDigit, maskDigit);    
if (Regex.IsMatch(maskSSN, "(—)|(–)|(-)")) { 
    int i = maskDigit; 
    while (Regex.Replace(maskSSN, "(—)|(–)|(-)", "").Length < maskDigit) { 
     i++; 
     maskSSN = originalSSN.Substring(originalSSN.Length - i, i); 
    } 

    string[] ssnArray = Regex.Split(maskSSN, "(—)|(–)|(-)", RegexOptions.ExplicitCapture); 
    if (ssnArray.Length > 1) { 
     maskSSN = originalSSN.Substring(originalSSN.Length - maskDigit - (ssnArray.Length - 1), maskDigit + (ssnArray.Length - 1)); 
    } 
} 

maskSSN = maskSSN.PadLeft(9, '#'); 
1

通用代码SSN屏蔽。

string originalSSN = Convert.ToString("123-456-789").PadLeft(9, '0'); 
     int maskDigit = 6; 
     string maskSSN = originalSSN.Substring(originalSSN.Length - maskDigit, maskDigit);    
     if (Regex.IsMatch(maskSSN, "(—)|(–)|(-)")) 
     { 
      int i = maskDigit; 
      while (Regex.Replace(maskSSN, "(—)|(–)|(-)", "").Length < maskDigit) 
      { 
       i++; 
       maskSSN = originalSSN.Substring(originalSSN.Length - i, i); 
      } 

      string[] ssnArray = Regex.Split(maskSSN, "(—)|(–)|(-)", RegexOptions.ExplicitCapture); 
      if (ssnArray.Length > 1) 
      { 
       maskSSN = originalSSN.Substring(originalSSN.Length - maskDigit - (ssnArray.Length - 1), maskDigit + (ssnArray.Length - 1)); 
      } 

     } 


     maskSSN = maskSSN.PadLeft(9, '#'); 
1

怎么样这个可爱的小功能,将屏蔽金属盒以及核动力攻击型潜艇:

public static string MaskSSN(string originalSSN) 
    { 
     if (originalSSN.Length < 5) return originalSSN; 
     var trailingNumbers = originalSSN.Substring(originalSSN.Length - 4); 
     var leadingNumbers = originalSSN.Substring(0, originalSSN.Length - 4); 
     var maskedLeadingNumbers = Regex.Replace(leadingNumbers, @"[0-9]", "X"); 
     return maskedLeadingNumbers + trailingNumbers; 
    } 

因此, “123-45-6789” 变成 “XXX-XX-6789” 和“12 1234567“变为”XX-XXX4567“。