如何实现Char.IsCurrencySymbol方法?C#标准库现有Char.IsSymbol方法
实现Char.IsCurrencySymbol的几种实用方案
嘿,这个需求我之前也碰到过,给你分享几个简单靠谱的实现思路,满足不同场景的需求:
方案一:基于Unicode官方分类(最推荐)
.NET的Char类其实已经提供了获取字符Unicode分类的方法,货币符号在Unicode里属于专门的UnicodeCategory.CurrencySymbol类别,直接用这个判断就完事了——这也是最标准、覆盖最全面的方式,能识别所有Unicode标准定义的货币符号(比如$、€、£、¥这些都不在话下)。
代码示例:
public static class CharExtensions { public static bool IsCurrencySymbol(this char c) { return Char.GetUnicodeCategory(c) == UnicodeCategory.CurrencySymbol; } }
测试你给的例子:
'$'.IsCurrencySymbol()→ 返回true'@'.IsCurrencySymbol()→ 返回false
而且这个方法还能识别一些不太常见的货币符号,比如₹(印度卢比)、₽(俄罗斯卢布),完全不用自己手动维护符号列表,省心!
方案二:自定义符号集合(适合特殊业务场景)
如果你的业务里需要识别一些Unicode标准没收录的自定义货币符号,或者只想限定某几个特定符号,那可以用哈希集合来实现,灵活性拉满。
代码示例:
public static class CharExtensions { // 按需添加你需要的货币符号 private static readonly HashSet<char> CurrencySymbols = new HashSet<char> { '$', '€', '£', '¥', '₹', '₽' }; public static bool IsCurrencySymbol(this char c) { return CurrencySymbols.Contains(c); } }
这种方式的好处是你完全可控,想加什么符号就加什么,但缺点是需要自己维护这个集合,要是有新的符号需求就得手动更新。
小提示
- 注意区分全角和半角符号:比如全角的
$(Unicode U+FF04),用方案一也能正确识别为货币符号,因为它的Unicode分类也是CurrencySymbol; - 方案一的实现会随着.NET版本和Unicode标准的更新自动覆盖新的货币符号,不用你操心;
- 如果是做全球化业务,优先用方案一,毕竟它能覆盖所有国际标准货币符号。
内容的提问来源于stack exchange,提问作者Yair Halberstadt
相关产品推荐
相关产品推荐

