给定用户提供的复合格式字符串(与 一起使用String.Format
)和一组表示将用于格式化复合格式字符串的参数的类型,您如何检查用户提供的值是否有效?
创建一个正则表达式来检查参数占位符的一般语法是否与文档{index[,alignment][:formatString]}
中的“ ”匹配应该很容易。验证复合格式字符串中占位符的索引是否小于输入参数的实际数量(即它们不引用不会给出的参数)并不难。但是,鉴于将传入的参数的类型是已知的,也应该可以验证“ ”是否适合这些类型。:formatString
例如,{0:dddd MMMM}
当第一个参数类型(0 索引)是数字(String.Format("{0:dddd MMMM}", 1234)
产生“ dddd MMMM
”)时,您想验证用户没有将“”指定为格式字符串。按类型划分的“ :formatString
”选项数量太大,无法手动检查所有内容。还有其他方法吗?还是您只需要与可能指定错误格式字符串的用户一起生活?
假设这里没有自定义或IFormatProvider
实现。只是 .NET Framework 中已有的基本类型。解决自定义内容的奖励积分。ICustomFormatter
IFormattable