1

ユーザーにタグを入力させたい:

Windows Linux「Mac OS X」

次に、それらを空白で分割しますが、「mac os x」も単語全体として認識します。

これは、爆発機能を他の機能と組み合わせることは可能ですか?

方法がなければなりません。

4

5 に答える 5

8

タグをコンマで区切って入力し、コンマ区切り文字で展開するようにユーザーに依頼します。

$string = "windows, linux, mac os x";
$pieces = explode(',', $string);

これは、とにかくほとんどのタグシステムが機能する方法です。

そうしないと、explodeは目的に対応できないため、パーサーを作成する必要があります。私の意見では、正規表現はやり過ぎです。

于 2009-12-19T10:04:46.240 に答える
2

Elzo Valugiが提案したように、ユーザーにタグ値をコンマで区切るか、ユーザーが一度に1つのタグを入力できるようにUIを改善します(Google WaveまたはWordpressのタグ付けUIと同様)。後でお勧めします。

提案されたエントリ形式(私はお勧めしません)に固執したい場合は、マルチワードタグ(分割されていないタグ)のリストを維持できます。ユーザーから提供された結合タグ文字列をこのリストと比較し、これらの用語を分割しないようにしてください。この方法に固執することに固執している場合は、詳細を詳しく説明することもできますが、入力形式自体に欠陥があるため、お勧めできません。

于 2009-12-19T10:13:41.997 に答える
2

引用符内に引用符を入れることができない (たとえば"foo\"bar"、許可されていない) 限り、正規表現を使用してこれを行うことができます。それ以外の場合は、完全なパーサーが必要です。

これは次のことを行う必要があります。

function split_words($input) {
  $matches = array();
  if (preg_match_all('/("([^"]+)")|(\w+)/', $input, $reg)) {
    for ($ii=0,$cc=count($reg[0]); $ii < $cc; ++$ii) {
      $matches[] = $reg[2][$ii] ? $reg[2][$ii] : $reg[3][$ii];
    }
  }
  return $matches;
}

使用法:

$input = 'windows linux "mac os x"';
var_dump(split_words($input));
于 2009-12-19T10:28:21.120 に答える
0

正規表現を行うことができます。私はそれらを書くのが得意ではありませんが、ここにいる他の誰かが、引用符で囲まれていないスペースでそれらを壊す「単語」と一致させることができるはずです。

于 2009-12-19T10:02:57.957 に答える
0

ユーザーが文字列"mac os x"を入力しているときに、空白を自動的に検出して文字列に変更し、"mac-os-x"この方法で分解できます。

$os = "metasys solaris mac-os-x";
$strings = explode(' ', $os);

これは、 replace関数を使用して行うことができます。

于 2009-12-19T10:24:17.073 に答える