Question

J'ai un champ de balise dans ma page web, dans lequel l'utilisateur peut entrer des tags les seprating par , (virgule), même comme cela se fait dans StackOverflow. J'utilise PHP et je suis seprating tous les tags enetered par l'utilisateur sur la base de la fonction virgule à l'aide puis explosera et les ajouter à ma table de balises dans Teh base de données.

Mon code fonctionne parfaitement pour les balises normales comme si l'utilisateur est entré battleship, strategy, sea war alors son travail, mais permet de dire que l'utilisateur enetered battleship, strategy, sea war, ou battleship, strategy, games, sea war, , , , , ou battleship, strategy, games,, sea war ou une mauvaise valeur, alors comment vais-je détecter puis entrez seulement le péché de la valeur correcte de la base de données .

Est-il possible à l'aide d'expressions rationnelles ou de toute autre manière, s'il vous plaît me dire comment?

Était-ce utile?

La solution

$tags = "battleship, stragety, ,";

$exp = explode(",", $tags);

$valid_tags = array();

foreach($exp as $tag)
{
 if( ($tag = trim($tag)) != "")
 {
   $valid_tags[] = $tag;
 }
}

supprime les espaces de toute étiquette et si elle a un texte, balise sera ajoutée dans un tableau valide:)

Autres conseils

Pas besoin de regExps dans ce cas. explode fournit des extraits d'étiquette et trim supprime les espaces blancs. Il suffit de vérifier, si quelque chose est alors à gauche.

$tags = explode (",", $posted_tags);
foreach ($tags as $tag) {
    if ($value = trim ($tag)) {
        insert_into_db ($value);
    }
}

Cheers,

Vous pouvez utiliser des expressions régulières pour diviser la chaîne dans les balises, par exemple:

\s*,\s*

$tags = preg_split('/\\s*,\\s*/', $str);
$tags = array_filter(array_map('trim', $tags));
var_dump($tags);

Mais alors vous devez toujours vérifier si les balises sont valides. Une balise vide par exemple (comme dans foo,,bar) n'est pas. filtrez simplement les et passer le reste à la base de données.

Ou vous utilisez une expression régulière pour trouver simplement des balises valides:

\w+(?:\s+\w+)*

preg_match_all('/\\w+(?:\\s+\\w+)*/', $str, $tags, PREG_PATTERN_ORDER);
var_dump($tags);
$str = "ship,, , , , ,water";

$tags = explode(',', $str);

foreach($tags as $tag) {
    if( $tag ) {
        echo trim($tag) ;
    }
}

Une meilleure façon est de proposer des utilisateurs ce que les étiquettes qu'ils peuvent ajouter - facile, vous pouvez le faire whit jquery ajax :) Certains pensent comme (ajaxdaddy.com)

Vous pouvez probablement en tirer avec la très succincte:

$tags = array_filter(explode(',', $str));

depuis (du manuel array_filter ):

  

Si aucun rappel est fourni, toutes les entrées d'entrée égale à FALSE (voir la conversion en booléen) seront supprimés.

(C'est si ça ne vous dérange pas de rejeter « 0 », et d'autres valeurs évaluées à FALSE)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top