Comment gérer les virgules dans les données CSV lors de l'analyse de chaînes en JavaScript
Lorsque vous traitez des chaînes CSV contenant des données qui incluent également des virgules, l'analyse peut être délicat. Diviser la chaîne par des virgules (",") seul ne vous donnera pas le résultat souhaité si certaines valeurs sont placées entre guillemets. Voici comment analyser de telles chaînes CSV tout en respectant les guillemets :
// Regex to validate a CSV string: const re_valid = /^\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)\s*(?:,\s*(?:'[^'\]*(?:\[\S\s][^'\]*)*'|"[^"\]*(?:\[\S\s][^"\]*)*"|[^,'"\s\]*(?:\s+[^,'"\s\]+)*)*\s*)*$/; // Regex to parse one value from a valid CSV string: const re_value = /(?!\s*$)\s*(?:'([^'\]*(?:\[\S\s][^'\]*)*)'|"([^"\]*(?:\[\S\s][^"\]*)*)"|([^,'"\s\]*(?:\s+[^,'"\s\]+)*)|)\s*(?:,|$)/g; function CSVtoArray(text) { if (!re_valid.test(text)) return null; const a = []; text.replace(re_value, (m0, m1, m2, m3) => { if (m1 !== undefined) a.push(m1.replace(/\'/g, "'")); else if (m2 !== undefined) a.push(m2.replace(/\"/g, '"')); else if (m3 !== undefined) a.push(m3); return ''; }); if (/,\s*$/.test(text)) a.push(''); return a; }
Avec cette approche, vous pouvez analyser avec précision les chaînes CSV, y compris celles avec des types mixtes et des caractères d'échappement, tout en respectant les guillemets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!