CSV Field Escaping for Safe Export
Escape CSV fields containing delimiters, quotes, line breaks or edge whitespace, doubling quotes and leaving simple values alone.
Code
export function escapeCsvField(value: unknown, delimiter = ","): string {
if (typeof delimiter !== "string" || delimiter.length !== 1) {
throw new RangeError("delimiter must be a single character");
}
if (value === null || value === undefined) return "";
const text = String(value);
const needsQuotes =
text.includes(delimiter) ||
text.includes('"') ||
/[\r\n]/.test(text) ||
/^\s|\s$/.test(text);
if (!needsQuotes) return text;
return '"' + text.replace(/"/g, '""') + '"';
}
export function toCsvRow(values: readonly unknown[], delimiter = ","): string {
return values.map((value) => escapeCsvField(value, delimiter)).join(delimiter);
}Report a problem with this exampleOpens a pre-filled issue on GitHub.