从字符串中删除格式:"(123)456-7890"=>"1234567890"?

Jer*_*old 36 .net c#

输入电话号码时我有一个字符串 - 有一个掩码所以它总是看起来像"(123)456-7890" - 我想在将格式保存到数据库之前取出格式.

我怎样才能做到这一点?

Mat*_*eer 81

使用linq的一种可能性是:

string justDigits = new string(s.Where(c => char.IsDigit(c)).ToArray());
Run Code Online (Sandbox Code Playgroud)

通过craigmoliver添加更清洁/更短的版本

string justDigits = new string(s.Where(char.IsDigit).ToArray())
Run Code Online (Sandbox Code Playgroud)

  • 它可以改写为:new string(s.Where(char.IsDigit).ToArray()) (4认同)
  • +1:清晰优雅.它甚至比RegEx答案(IMO)更清晰,因为它解释了IsDigit,而不是依赖于简洁\ d.(啊,LINQ.我仍然和.NET 2.0一起跋涉,你可以通过我的答案中的片段来猜测.) (3认同)

Dir*_*mar 37

您可以使用正则表达式删除所有非数字字符:

string phoneNumber = "(123) 456-7890";
phoneNumber = Regex.Replace(phoneNumber, @"[^\d]", "");
Run Code Online (Sandbox Code Playgroud)

然后进一步 - 根据您的要求 - 您可以将数字存储为字符串或整数.要将数字转换为整数类型,您将拥有以下选项:

// throws if phoneNumber is null or cannot be parsed
long number = Int64.Parse(phoneNumber, NumberStyles.Integer, CultureInfo.InvariantCulture);

// same as Int64.Parse, but returns 0 if phoneNumber is null
number = Convert.ToInt64(phoneNumber);

// does not throw, but returns true on success
if (Int64.TryParse(phoneNumber, NumberStyles.Integer, 
       CultureInfo.InvariantCulture, out number))
{
    // parse was successful
}
Run Code Online (Sandbox Code Playgroud)

  • `[^\d]`应该和'\ D`一样? (8认同)
  • 你必须学习`[^]`.我认为`\ D`需要较少的学习. (4认同)
  • 是的,它是一样的.它没有区别,除了`[^\d]`更明确,需要更少的学习. (2认同)

EKS*_*EKS 12

因为没有人做过for循环.

long GetPhoneNumber(string PhoneNumberText)
{
    // Returns 0 on error

    StringBuilder TempPhoneNumber = new StringBuilder(PhoneNumberText.Length);
    for (int i=0;i<PhoneNumberText.Length;i++)
    {
        if (!char.IsDigit(PhoneNumberText[i]))
            continue;

        TempPhoneNumber.Append(PhoneNumberText[i]);
    }

    PhoneNumberText = TempPhoneNumber.ToString();
    if (PhoneNumberText.Length == 0)
        return 0;// No point trying to parse nothing

    long PhoneNumber = 0;
    if(!long.TryParse(PhoneNumberText,out PhoneNumber))
        return 0; // Failed to parse string

    return PhoneNumber;
}
Run Code Online (Sandbox Code Playgroud)

像这样使用:

long phoneNumber = GetPhoneNumber("(123) 456-7890"); 
Run Code Online (Sandbox Code Playgroud)


更新
如公关评论,许多国家在数字的开头确实有零,如果你需要支持,那么你必须返回一个不长的字符串.要更改我的代码,请执行以下操作:

1)将函数返回类型从long更改为string.
2)在错误
3 上使函数返回null而不是0 )在成功解析后,使它返回PhoneNumberText

  • 也许是因为许多国家/地区使用带有前导零的电话号码,如果将电话​​号码解析/存储为实际号码,则会删除这些零. (4认同)
  • 他正在存储一个电话号码。为什么你*曾经*想要将电话号码存储为整数? (2认同)