鉴于用户提供的复合格式字符串(用于String.Format
)和表示用于格式化复合格式字符串的参数的一组类型,如何检查用户提供的值是否有效?
应该很容易创建一个正则表达式来检查参数占位符的一般语法是否匹配"{index[,alignment][:formatString]}
",根据文档。在复合格式字符串中验证占位符的索引是否小于实际的类型化参数数量(即它们不引用不会被给出的参数)也不太困难。然而,考虑到将要传递的参数的类型已知,也应该可能验证":formatString
"对于这些类型是合适的。
例如,您想要验证用户不会在第一个参数类型(0索引)为数字时指定“{0:dddd MMMM}
”作为格式字符串(String.Format("{0:dddd MMMM}", 1234)
返回“dddd MMMM
”)。每种类型的“:formatString
”选项的数量太大了,您无法手动检查所有内容。有其他方法吗?还是您只能忍受用户可能指定错误的格式字符串?
假设这里没有自定义的IFormatProvider
、ICustomFormatter
或IFormattable
实现。只有.NET框架中的基本类型。额外加分考虑自定义实现方案。