我有这个列表,我用它来分隔参数,这些参数稍后用作输入中的命令。
问题是其中一个字段是自由文本,可供用户写入。我如何确保格式化自由文本或使用用户不会意外使用的分隔符?现在我使用逗号分隔命令,但我担心用户会写一个逗号并弄乱解决方案。
这里的最佳做法是什么?
您可以选择一个深奥/不可能键入的字符作为分隔符,也可以使用转义字符。
IE:
command|parameter, string <- Esoteric character
或者
command,parameter\, string <- Escape character
就个人而言,我会选择一个深奥的字符,因为您仍然可以使用简单的 String.Split 函数。您始终可以检查用户的输入,以确保他们没有包含带有您用作分隔符的字符的参数。
你可以使用正则表达式。这是一个很棒的教程http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial
然后,您可以执行以下操作来验证用户输入:
var stringToTest = "abcd";
Regex testRegex = new Regex("[^0-9]");
var isMatch = textRegex.IsMatch(strNumber);
CSV 文件的 MIME 标准解释了如何正确构建可能包含逗号的 CSV 文件:
例如,假设您要构建具有以下值的 CSV 文件:
Hello
Well, does this work?
I guess this "kinda" work
那么结果将是:
"Hello","Well, does this work?","I guess this ""kinda"" work"
我最终得到的解决方案看起来像这样,它使用三个深奥的字符来最小化与用户输入混淆的风险。
return string.Format("true|~|eventEdit|~|{0}|~|{1}|~|{2}|~|{3}|~|{4}", variable, variable, variable, variable, variable);
string[] stringSeparators = new string[] { "|~|" };
string[] parameters = PlanningTypeIcon.CommandArgument.ToString().Split(stringSeparators, StringSplitOptions.None);