using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System;
public class Test
{
public static void Main()
{
var originalString = "My name @is ,Wan.;'; Wan";
Console.WriteLine("Original string:");
Console.WriteLine(originalString);
Console.WriteLine();
var sanitizedString = RemoveExcept(originalString, alphas: true, spaces: true);
Console.WriteLine("Sanitized string:");
Console.WriteLine(sanitizedString);
Console.WriteLine();
}
/// <summary>
/// Returns a copy of the original string containing only the set of whitelisted characters.
/// </summary>
/// <param name="value">The string that will be copied and scrubbed.</param>
/// <param name="alphas">If true, all alphabetical characters (a-zA-Z) will be preserved; otherwise, they will be removed.</param>
/// <param name="numerics">If true, all alphabetical characters (a-zA-Z) will be preserved; otherwise, they will be removed.</param>
/// <param name="dashes">If true, all alphabetical characters (a-zA-Z) will be preserved; otherwise, they will be removed.</param>
/// <param name="underlines">If true, all alphabetical characters (a-zA-Z) will be preserved; otherwise, they will be removed.</param>
/// <param name="spaces">If true, all alphabetical characters (a-zA-Z) will be preserved; otherwise, they will be removed.</param>
/// <param name="periods">If true, all decimal characters (".") will be preserved; otherwise, they will be removed.</param>
public static string RemoveExcept(string value, bool alphas = false, bool numerics = false, bool dashes = false, bool underlines = false, bool spaces = false, bool periods = false) {
if (string.IsNullOrWhiteSpace(value)) return value;
if (new[] { alphas, numerics, dashes, underlines, spaces, periods }.All(x => x == false)) return value;
var whitelistChars = new HashSet<char>(string.Concat(
alphas ? "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" : "",
numerics ? "01234567890" : "",
dashes ? "-" : "",
underlines ? "_" : "",
periods ? "." : "",
spaces ? " " : ""
).ToCharArray());
var scrubbedValue = value.Aggregate(new StringBuilder(), (sb, @char) => {
if (whitelistChars.Contains(@char)) sb.Append(@char);
return sb;
}).ToString();
return scrubbedValue;
}
}
dXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5MaW5xOwp1c2luZyBTeXN0ZW0uVGV4dDsKdXNpbmcgU3lzdGVtLk5ldDsKdXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBvcmlnaW5hbFN0cmluZyA9ICJNeSBuYW1lIEBpcyAsV2FuLjsnOyBXYW4iOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJPcmlnaW5hbCBzdHJpbmc6Iik7CgkJQ29uc29sZS5Xcml0ZUxpbmUob3JpZ2luYWxTdHJpbmcpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCk7CgkJCgkJdmFyIHNhbml0aXplZFN0cmluZyA9IFJlbW92ZUV4Y2VwdChvcmlnaW5hbFN0cmluZywgYWxwaGFzOiB0cnVlLCBzcGFjZXM6IHRydWUpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJTYW5pdGl6ZWQgc3RyaW5nOiIpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKHNhbml0aXplZFN0cmluZyk7CgkJQ29uc29sZS5Xcml0ZUxpbmUoKTsKCX0KCQoJLy8vIDxzdW1tYXJ5PgoJLy8vIFJldHVybnMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcgY29udGFpbmluZyBvbmx5IHRoZSBzZXQgb2Ygd2hpdGVsaXN0ZWQgY2hhcmFjdGVycy4KCS8vLyA8L3N1bW1hcnk+CgkvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgc3RyaW5nIHRoYXQgd2lsbCBiZSBjb3BpZWQgYW5kIHNjcnViYmVkLjwvcGFyYW0+CgkvLy8gPHBhcmFtIG5hbWU9ImFscGhhcyI+SWYgdHJ1ZSwgYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIChhLXpBLVopIHdpbGwgYmUgcHJlc2VydmVkOyBvdGhlcndpc2UsIHRoZXkgd2lsbCBiZSByZW1vdmVkLjwvcGFyYW0+CgkvLy8gPHBhcmFtIG5hbWU9Im51bWVyaWNzIj5JZiB0cnVlLCBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgKGEtekEtWikgd2lsbCBiZSBwcmVzZXJ2ZWQ7IG90aGVyd2lzZSwgdGhleSB3aWxsIGJlIHJlbW92ZWQuPC9wYXJhbT4KCS8vLyA8cGFyYW0gbmFtZT0iZGFzaGVzIj5JZiB0cnVlLCBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgKGEtekEtWikgd2lsbCBiZSBwcmVzZXJ2ZWQ7IG90aGVyd2lzZSwgdGhleSB3aWxsIGJlIHJlbW92ZWQuPC9wYXJhbT4KCS8vLyA8cGFyYW0gbmFtZT0idW5kZXJsaW5lcyI+SWYgdHJ1ZSwgYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIChhLXpBLVopIHdpbGwgYmUgcHJlc2VydmVkOyBvdGhlcndpc2UsIHRoZXkgd2lsbCBiZSByZW1vdmVkLjwvcGFyYW0+CgkvLy8gPHBhcmFtIG5hbWU9InNwYWNlcyI+SWYgdHJ1ZSwgYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIChhLXpBLVopIHdpbGwgYmUgcHJlc2VydmVkOyBvdGhlcndpc2UsIHRoZXkgd2lsbCBiZSByZW1vdmVkLjwvcGFyYW0+CgkvLy8gPHBhcmFtIG5hbWU9InBlcmlvZHMiPklmIHRydWUsIGFsbCBkZWNpbWFsIGNoYXJhY3RlcnMgKCIuIikgd2lsbCBiZSBwcmVzZXJ2ZWQ7IG90aGVyd2lzZSwgdGhleSB3aWxsIGJlIHJlbW92ZWQuPC9wYXJhbT4KCXB1YmxpYyBzdGF0aWMgc3RyaW5nIFJlbW92ZUV4Y2VwdChzdHJpbmcgdmFsdWUsIGJvb2wgYWxwaGFzID0gZmFsc2UsIGJvb2wgbnVtZXJpY3MgPSBmYWxzZSwgYm9vbCBkYXNoZXMgPSBmYWxzZSwgYm9vbCB1bmRlcmxpbmVzID0gZmFsc2UsIGJvb2wgc3BhY2VzID0gZmFsc2UsIGJvb2wgcGVyaW9kcyA9IGZhbHNlKSB7CgkJaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UodmFsdWUpKSByZXR1cm4gdmFsdWU7CgkJaWYgKG5ld1tdIHsgYWxwaGFzLCBudW1lcmljcywgZGFzaGVzLCB1bmRlcmxpbmVzLCBzcGFjZXMsIHBlcmlvZHMgfS5BbGwoeCA9PiB4ID09IGZhbHNlKSkgcmV0dXJuIHZhbHVlOwoKCQl2YXIgd2hpdGVsaXN0Q2hhcnMgPSBuZXcgSGFzaFNldDxjaGFyPihzdHJpbmcuQ29uY2F0KAoJCQlhbHBoYXMgPyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIgOiAiIiwKCQkJbnVtZXJpY3MgPyAiMDEyMzQ1Njc4OTAiIDogIiIsCgkJCWRhc2hlcyA/ICItIiA6ICIiLAoJCQl1bmRlcmxpbmVzID8gIl8iIDogIiIsCgkJCXBlcmlvZHMgPyAiLiIgOiAiIiwKCQkJc3BhY2VzID8gIiAiIDogIiIKCQkpLlRvQ2hhckFycmF5KCkpOwoKCQl2YXIgc2NydWJiZWRWYWx1ZSA9IHZhbHVlLkFnZ3JlZ2F0ZShuZXcgU3RyaW5nQnVpbGRlcigpLCAoc2IsIEBjaGFyKSA9PiB7CgkJCWlmICh3aGl0ZWxpc3RDaGFycy5Db250YWlucyhAY2hhcikpIHNiLkFwcGVuZChAY2hhcik7CgkJCXJldHVybiBzYjsKCQl9KS5Ub1N0cmluZygpOwoKCQlyZXR1cm4gc2NydWJiZWRWYWx1ZTsKCX0KfQ==