Dans cette situation, vous avez besoin d'une solution qui distingue les virgules entre guillemets de celles qui séparent les valeurs. Une expression régulière est l’outil idéal pour cette tâche. Voici comment aborder cela :
// 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 to parse CSV string into array const CSVtoArray = (text) => { // Validate CSV string if (!re_valid.test(text)) return null; const values = []; text.replace(re_value, (m0, m1, m2, m3) => { // Handle single-quoted values if (m1 !== undefined) values.push(m1.replace(/\'/g, "'")); // Handle double-quoted values else if (m2 !== undefined) values.push(m2.replace(/\"/g, '"')); // Handle unquoted values else if (m3 !== undefined) values.push(m3); return ''; }); // Handle special case of empty last value if (/,\s*$/.test(text)) values.push(''); return values; };
// Sample CSV string with commas in data const csvString = "'string, with comma', 23, 'lala'"; // Parse the CSV string into an array of values const values = CSVtoArray(csvString); console.log(values); // ['string, with comma', '23', 'lala']
Cette approche analyse efficacement la chaîne CSV, préservant l'intégrité des valeurs citées et gérant correctement les virgules dans les champs de données. Vous pouvez ajuster l'expression régulière pour personnaliser la gestion des variations spécifiques de la chaîne CSV ou des exigences de formatage.
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!