输入电话号码时我有一个字符串 - 有一个掩码所以它总是看起来像"(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)
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)
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