0

古い OsCommerce インストールからのこのコード スニペットがあります。

    $pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true'
                    ?   "([^[:alnum:]])+"
                    :   "([[:punct:]])+";

[:punct:] セレクターを変更して、- ダッシュを除外したいと思います。

次のコード行は

$anchor = ereg_replace($pattern, '', strtolower($string));

以前に見つかった文字を削除します。どうすればダッシュを維持できますか?

ありがとう、マリオ

編集

私はそれを得たと思います:

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true'
                    ?   "([^[:alnum:]])+"
                    :   "([^-a-zA-Z0-9[:space:]])+";

注: ダッシュが最初に来る必要があります。または、アンダースコアの場合:

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true'
                    ?   "([^[:alnum:]])+"
                    :   "([^a-zA-Z0-9_[:space:]])+";

否定的な先読みの使い方がわかりませんでした:(。乾杯。マリオ

4

1 に答える 1

1

[characterset]を使用する代わりに、おそらく独自のものを作成する必要があります[:punct:]

これはほぼ正しいように見えますが、確認する必要があります。

[^a-zA-Z0-9-\s]

これは、(az) 文字、数字、空白、またはダッシュ以外のものを置き換えます。

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true'
            ?   "([^[:alnum:]])+"
            :   "[^a-zA-Z0-9-\s]+";

編集: ereg は lookaround をサポートしていないため、古い答えは機能しません。

この否定的な先読みを試してください(?!-):

$pattern = $this->attributes['SEO_REMOVE_ALL_SPEC_CHARS'] == 'true'
                ?   "([^[:alnum:]])+"
                :   "((?!-)[[:punct:]])+";
于 2011-08-05T22:34:36.407 に答える