4

给定用户提供的复合格式字符串(与 一起使用String.Format)和一组表示将用于格式化复合格式字符串的参数的类型,您如何检查用户提供的值是否有效?

创建一个正则表达式来检查参数占位符的一般语法是否与文档{index[,alignment][:formatString]}中的“ ”匹配应该很容易。验证复合格式字符串中占位符的索引是否小于输入参数的实际数量(即它们不引用不会给出的参数)并不难。但是,鉴于将传入的参数的类型是已知的,也应该可以验证“ ”是否适合这些类型。:formatString

例如,{0:dddd MMMM}当第一个参数类型(0 索引)是数字(String.Format("{0:dddd MMMM}", 1234)产生“ dddd MMMM”)时,您想验证用户没有将“”指定为格式字符串。按类型划分的“ :formatString”选项数量太大,无法手动检查所有内容。还有其他方法吗?还是您只需要与可能指定错误格式字符串的用户一起生活?

假设这里没有自定义或IFormatProvider实现。只是 .NET Framework 中已有的基本类型。解决自定义内容的奖励积分。ICustomFormatterIFormattable

4

3 回答 3

5

AFAIK,没有内置的方法可以做到这一点。

您可以手动编写每个常见案例,但我不建议这样做。

编辑)一个务实的选择可能是try/catch- 在用户输入格式时尽早测试格式......

于 2009-04-01T20:17:20.673 回答
4

对不起,但是这样做的方法是:

try { string.Format(godKnowsWhat, aBunchOfArguments); }
catch(FormatException) { // use exception for control flow lol }

是的,有点糟糕。

于 2009-04-01T20:19:51.557 回答
1

如果用户指定的错误格式字符串可能导致异常,那么也许您可以尝试一下?是的,这是天真的想法。

于 2009-04-01T20:27:10.103 回答