Как правильно ввести теги? - PullRequest
1 голос
/ 13 июля 2009

У меня есть поле тегов на моей веб-странице, в котором пользователь может вводить теги, разделяя их на , (запятая), так же, как это делается в StackOverflow. Я использую PHP и разделяю все теги, введенные пользователем, на основе запятой, используя функцию разнесения, а затем добавляю их в свою таблицу тегов в базе данных.

Мой код отлично работает для обычных тегов, например, если пользователь ввел battleship, strategy, sea war, то он работает, но, скажем, пользователь ввел battleship, strategy, sea war, или battleship, strategy, games, sea war, , , , , или battleship, strategy, games,, sea war или любое неправильное значение, тогда как я его обнаружу и затем введите только правильное значение в базу данных.

Возможно ли использовать regExp или любым другим способом, скажите, пожалуйста, как?

Ответы [ 6 ]

7 голосов
/ 13 июля 2009
$tags = "battleship, stragety, ,";

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

$valid_tags = array();

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

Удалит пробелы из любого тега, и, если у него есть текст, тег будет добавлен в допустимый массив:)

1 голос
/ 13 июля 2009
$str = "ship,, , , , ,water";

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

foreach($tags as $tag) {
    if( $tag ) {
        echo trim($tag) ;
    }
}
1 голос
/ 13 июля 2009

Нет необходимости в RegExps в этом случае. explode доставляет фрагменты тега, а trim удаляет пробелы. Просто проверьте, осталось ли что-то.

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

Приветствия

1 голос
/ 13 июля 2009

Вы можете использовать регулярные выражения, чтобы разбить строку на теги, например:

\s*,\s*

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

Но тогда вам все равно нужно проверить правильность тегов. Например, пустой тег (как в foo,,bar) не является. Просто отфильтруйте их и передайте остальное в базу данных.

Или вы используете регулярное выражение, чтобы просто найти допустимые теги:

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

preg_match_all('/\\w+(?:\\s+\\w+)*/', $str, $tags, PREG_PATTERN_ORDER);
var_dump($tags);
0 голосов
/ 14 июля 2009

Вы можете , вероятно, сойти с рук с очень кратким:

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

с тех пор (из руководства для array_filter):

Если обратный вызов не предоставлен, все записи ввода, равные FALSE (см. Преобразование в логическое значение), будут удалены.

(Это если вы не против отклонения '0' и других значений, которые оцениваются как ЛОЖЬ)

0 голосов
/ 13 июля 2009

Лучше всего предложить пользователю, какие теги они могут добавить - просто, вы можете сделать это с помощью jquery ajax :) Некоторые думают, что здесь (ajaxdaddy.com)

...