後で入力のコマンドとして使用されるパラメーターに分離するために使用するこのリストがあります。
問題は、フィールドの 1 つがフリーテキストであり、ユーザーが書き込むことができることです。フリーテキストをフォーマットするか、ユーザーが誤って使用できないセパレーターを使用することを確認するにはどうすればよいですか? 現在、コマンドを区切るためにカンマを使用していますが、ユーザーがカンマを書いてソリューションを台無しにするのではないかと心配しています。
ここでのベストプラクティスは何ですか?
区切り文字として難解な/入力不可能な文字を選択するか、エスケープ文字を使用できます。
すなわち:
command|parameter, string <- Esoteric character
また
command,parameter\, string <- Escape character
個人的には、単純なString.Split関数を引き続き使用できるため、難解な文字を選択します。ユーザーの入力をいつでもチェックして、区切り文字として使用している文字にパラメーターが含まれていないことを確認できます。
CSVファイルのMIME標準では、コンマを含む可能性のあるCSVファイルを適切に作成する方法について説明しています。
たとえば、次の値を使用してCSVファイルを作成するとします。
Hello
Well, does this work?
I guess this "kinda" work
その場合、結果は次のようになります。
"Hello","Well, does this work?","I guess this ""kinda"" work"
私が最終的に得たソリューションは次のようになります。3 つの難解な文字を使用して、ユーザー入力と混同されるリスクを最小限に抑えます。
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);
正規表現を使用できます。ここにそれに関する素晴らしいチュートリアルがあります 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);