Etiketlerini doğru bir şekilde girmek için?

4 Cevap php

Ben StackOverflow yapıldığı gibi kullanıcı aynı , (virgül) onları seprating etiketleri, girebileceğiniz, benim web sayfasında bir etiket alanı var. Ben PHP kullanıyorum ve işlevini patlayabilir kullanarak virgül temelinde kullanıcı tarafından enetered tüm etiketleri seprating ve sonra teh veritabanında benim etiketleri tabloya ekleyerek ediyorum.

Benim kod [(3)] kullanıcı daha sonra kendi çalışma battleship, strategy, sea war girdiyseniz gibi normal etiketleri için mükemmel çalışıyor, ancak kullanıcı battleship, strategy, sea war, enetered veya battleship, strategy, games, sea war, , , , , veya {Diyelim edilir } veya herhangi bir yanlış değer, sonra onu nasıl algılar ve daha sonra sadece doğru değeri günah veritabanı girin.

Bu Regexp veya başka şekilde kullanarak mümkün mü, söyle lütfen?

4 Cevap

$tags = "battleship, stragety, ,";

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

$valid_tags = array();

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

Herhangi bir etiketi boşluk kaldırır ve herhangi bir metin varsa, etiket geçerli diziye eklenecektir :)

Bu durumda Regexplerin gerek yok. explode etiketi parçacıkları sunar, ve trim beyaz boşlukları kaldırır. Sonra sol bir şey olmadığını, sadece kontrol edin.

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

Alkış,

Örneğin, etiketleri içine dize bölmek için normal ifadeleri kullanabilirsiniz:

\s*,\s*

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

Ama sonra yine etiketleri geçerli olup olmadığını kontrol etmeniz gerekir. Örneğin boş bir etiket (gibi foo,,bar) değildir. Sadece onları filtre ve veritabanına kalanını geçirmek.

Yoksa sadece geçerli etiketler bulmak için normal bir ifade kullanabilirsiniz:

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

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