2009-07-13 16 views
1

Ich habe ein Tag-Feld in meiner Webseite, in dem Benutzer Tags eingeben können, indem sie sie durch , (Komma) trennen, wie in StackOverflow. Ich verwende PHP und ich teile alle Tags, die vom Benutzer auf der Basis von Komma mit Hilfe der explode-Funktion eingegeben wurden, und füge sie dann zu meiner Tags-Tabelle in der Datenbank hinzu.Wie kann ich Tags korrekt eingeben?

Mein Code funktioniert perfekt für den normalen Tags wie wenn Benutzer eingegeben battleship, strategy, sea war dann seine Arbeits, aber sagen wir mal Benutzer enetered battleship, strategy, sea war, oder battleship, strategy, games, sea war, , , , , oder oder einen falschen Wert, dann, wie ich es erkennen und dann nur sin richtigen Wert eingeben Datenbank.

Ist es möglich, regExp oder andere Wege zu verwenden, bitte sagen Sie mir wie?

+1

Tags durch Komma getrennt arn't Stackoverflow, sind sie? Dachte, es war Leerzeichen ... – Svish

+0

Ja, sie sind räumlich getrennt. – Prashant

Antwort

7
$tags = "battleship, stragety, ,"; 

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

$valid_tags = array(); 

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

Wird Leerzeichen aus jedem Tag entfernen und wenn es einen beliebigen Text hat, wird Tag in gültige Array hinzugefügt werden :)

1

können Sie reguläre Ausdrücke verwenden, um die Zeichenfolge in die Tags zu teilen, zum Beispiel:

\s*,\s* 

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

Aber dann müssen Sie noch überprüfen, ob die Tags gültig sind. Ein leeres Tag zum Beispiel (wie in) ist nicht. Filtern Sie sie einfach aus und geben Sie den Rest an Ihre Datenbank weiter.

Oder Sie verwenden einen regulären Ausdruck nur gültigen Tags zu finden:

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

preg_match_all('/\\w+(?:\\s+\\w+)*/', $str, $tags, PREG_PATTERN_ORDER); 
var_dump($tags); 
+0

Ich denke das ist der Grund, warum SO Leerzeichen verwendet, um Tags zu trennen, denn wenn jemand doppelte Leerzeichen oder einzelne Leerzeichen in das letzte Feld eingibt, können wir es einfach trimmen. ? – Prashant

+0

Das können Sie auch mit Kommas und Leerzeichen tun: 'trim ($ str, ',')'. – Gumbo

0

bessere Weg ist, Benutzer empfehlen, was Tags sie hinzufügen können - einfach werden Sie es Whit kann tun jquery ajax :) Einige denken, wie here (ajaxdaddy.com)

1

In diesem Fall sind keine RegExps erforderlich. explode liefert die Tag-Snippets und trim entfernt Leerzeichen. Überprüfe einfach, ob dann etwas übrig ist.

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

Cheers,

1
$str = "ship,, , , , ,water"; 

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

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

Sie können Tags vor dem Einfügen trimmen, falls jemand "Schiff, Schlacht, Marine" eingeben –

+0

Danke kuroki. Ich habe bearbeitet. – sqram

+0

Ich bin mir nicht ganz sicher, was die isset() tut. $ tag ist trotzdem gesetzt, auch wenn es die leere Zeichenfolge ist. – Boldewyn

0

Sie können wahrscheinlich weg mit dem sehr prägnant:

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

da (aus dem Handbuch für array_filter):

Wenn kein Callback angegeben wird, werden alle Eingaben von FALSE (siehe Umwandlung in boolean) entfernt.

(Das ist, wenn Sie nicht die Ablehnung nichts dagegen ‚0‘ und andere Werte, die Falsch ergeben)

Verwandte Themen