我有这个列表,我用它来分隔成稍后用作输入中的命令的参数。以逗号分隔的列表中的分隔符和自由文本字段
问题是,其中一个字段是自由文本,可供用户编写。如何确保格式化自由文本或我使用不能被用户意外使用的分隔符?现在我使用逗号分隔命令,但我担心用户会写一个逗号并弄乱解决方案。
这里最好的做法是什么?
我有这个列表,我用它来分隔成稍后用作输入中的命令的参数。以逗号分隔的列表中的分隔符和自由文本字段
问题是,其中一个字段是自由文本,可供用户编写。如何确保格式化自由文本或我使用不能被用户意外使用的分隔符?现在我使用逗号分隔命令,但我担心用户会写一个逗号并弄乱解决方案。
这里最好的做法是什么?
您可以选择一个深奥/不能输入字符作为你的分隔符,或者你可以使用转义字符。
即:
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);
The MIME standard for CSV files介绍了如何正确地构建,可能包含逗号的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);
深奥的字符是什么意思?似乎是一个很好的解决方案,如果我可以使用它来分割我的命令... – 2013-03-19 11:56:16
一个不常见的字符,人们不可能输入 - 像管道符号,或者〜也许。你也可以使用两个字符,这是不太可能的。 – Richard 2013-03-19 16:20:04
啊,谢谢,我的英文不够好,不能理解:) – 2013-03-20 07:25:19