如何检测字符串是否是c#中的货币
本文关键字:是否是 货币 字符串 何检测 检测 | 更新日期: 2023-09-27 18:06:44
通常当我需要将currency string
(如1200,55 zz/$1,249)转换为十进制值时,我这样做:
if (currencyString.Contains("zł)) {
decimal value = Decimal.Parse(dataToCheck.Trim(), NumberStyles.Number | NumberStyles.AllowCurrencySymbol);
}
是否有一种方法来检查如果字符串是货币没有检查特定的货币?
如果您只是进行转换(您应该添加| NumberStyles.AllowThousands
| NumberStyles.AllowDecimalPoint
),那么如果字符串包含当前UI的错误货币符号,解析将失败-在这种情况下引发异常。如果它不包含货币符号,解析仍然可以工作。
因此,您可以使用TryParse
来允许这一点并测试失败。
如果您的输入可以是任何货币,您可以使用这个版本的TryParse
,它以IFormatProvider
作为参数,您可以使用它指定关于字符串的特定文化的解析信息。因此,如果解析默认UI区域性失败,您可以再次遍历每个支持的区域性。当你找到一个可以使用的电话时,你就有了你的电话号码和货币类型(兹罗提,美元,欧元,卢布等)
据我所知,最好这样做:
decimal value = -1;
if (Decimal.TryParse(dataToCheck.Trim(), NumberStyles.Number |
NumberStyles.AllowCurrencySymbol,currentCulture, out value)
{do something}
参见Jeff Atwood关于TryParse的描述。它不会抛出异常,并且在异常情况下比Parse快得多。
要检查字符串是否是用于输入工资的货币金额-我使用了以下命令:
public bool TestIfWages(string wages)
{
Regex regex = new Regex(@"^'d*'.?'d?'d?$");
bool y = regex.IsMatch(wages);
return y;
}
您可以尝试在字符串中搜索您认为是货币符号的内容,然后在字典中查找它,看看它是否真的是货币符号。我只会看字符串的开头和结尾挑出任何不是数字的东西,那就是你要查的。(如果两端都有东西,那么我想你可以假设它不是货币。)
这种方法的优点是,您只需要扫描字符串一次,而不必分别测试每种货币。
下面是我想到的一个例子,尽管它可能需要一些改进:
class Program
{
private static ISet<string> _currencySymbols = new HashSet<string>() { "$", "zł", "€", "£" };
private static bool StringIsCurrency(string str)
{
// Scan the beginning of the string until you get to the first digit
for (int i = 0; i < str.Length; i++)
{
if (char.IsDigit(str[i]))
{
if (i == 0)
{
break;
}
else
{
return StringIsCurrencySymbol(str.Substring(0, i).TrimEnd());
}
}
}
// Scan the end of the string until you get to the last digit
for (int i = 0, pos = str.Length - 1; i < str.Length; i++, pos--)
{
if (char.IsDigit(str[pos]))
{
if (i == 0)
{
break;
}
else
{
return StringIsCurrencySymbol(str.Substring(pos + 1, str.Length - pos - 1).TrimStart());
}
}
}
// No currency symbol found
return false;
}
private static bool StringIsCurrencySymbol(string symbol)
{
return _currencySymbols.Contains(symbol);
}
static void Main(string[] args)
{
Test("$1000.00");
Test("500 zł");
Test("987");
Test("book");
Test("20 €");
Test("99£");
}
private static void Test(string testString)
{
Console.WriteLine(testString + ": " + StringIsCurrency(testString));
}
}