Analyser formulaire textarea par une virgule ou une nouvelle ligne
J'ai un textarea dans un formulaire qui permet aux utilisateurs de saisir une liste de nombres séparés par un saut de ligne ou une virgule. J'ai besoin de numéros qu'ils ont saisis pour être entré dans un tableau. Malheureusement, le code que j'ai ne fonctionne pas tout le temps. Si les utilisateurs peuvent entrer en virgule sepated de données et un retour à la ligne, puis la virgule est à gauche dans le tableau résultant. En plus, si on ajoute une nouvelle ligne à la fin de la zone de texte, puis il entre dans un vide de la valeur dans le tableau. Le code que j'ai est ci-dessous:
$data = preg_split( "[\r\n]", $_POST[ 'textarea' ] );
if (count($data) == 1) {
$string = $data[0];
$data = explode(',', $string);
}
J'espérais de l'aide sur la façon de contourner les problèmes que j'ai.
Vous devez vous connecter pour publier un commentaire.
"une liste de nombres séparés par un saut de ligne ou une virgule"
Donc, vous ne se soucient pas de qui il s'agit, ou si il y a une virgule et un retour à la ligne? Alors pourquoi ne pas simplement utiliser tous les trois personnages tout aussi séparateurs et permettre à "un ou plusieurs d'entre eux?
imprime
[\r\n,\s]
.imprime
L'une des raisons pourrait être que vous êtes absent délimiteur et
+
pour trouver un minerai de plus, au lieu de cela:Essayer:
Il le faut "couper" l'entrée de l'utilisateur à partir de l'espace blanc:
Cela permettra d'éliminer attaque et de fuite des blancs de l'espace. Vous pouvez également supprimer attaque et de fuite des virgules - pour éviter les vides de la matrice des indices de csv est utilisé par la spécification d'une virgule comme second argument de la garniture:
Pour plus d'info sur la garniture de voir http://php.net/trim
Ce sera divisée par des retours à la ligne ou des virgules, et d'éliminer tous les retours à la ligne.
Si vous voulez bande de multispaces à des espaces simples, garniture espaces avant et après, et permettent également de point-virgule ';' au lieu de juste une virgule ',', alors ce code a fonctionné pour moi. Je suis sûr que cela pourrait être fait en une seule preg_split et/ou preg_replace si!