1

preg_replace関数に問題があります。

私のコードでは、これを使用して、文字列の先頭にある文字や数字ではないすべての文字を削除します。

これはうまく機能しますが、$ stringに「è、ò、à、ù、é、ì」のようなiso-8859-1文字が含まれている場合、単語ではないと見なされ、すべて削除されます。

preg_replace('/^[^a-zA-Z0-9]+/', '', $string);

すなわち。$stringが含まれている場合èxample、出力はになりますxample

これらのiso-8859-1母音が含まれている必要があります。

誰かがこれに対する解決策を持っていますか?

4

2 に答える 2

3

PCRE は Unicode ブロックをサポートしていないため (その場合ははるかに簡単になります)、許可された文字のセット (またはその否定) を手動で指定する以外に選択肢はありません。正規表現は次のようになります

[^a-zA-Z0-9\xC0-\xFF]+

問題は、範囲\xC0-\xFFに望ましくない文字 (除算記号、 など\xF7) も含まれているため、要件に応じて許容範囲に分割する必要があることです。コードページのレイアウトを見て、どの文字が OK でどの文字が正しくないかを判断してください。

于 2012-09-04T14:13:45.847 に答える
1

試す

$string = "1èxample";
$r = preg_replace('/^[^\p{L}\p{Nd}]+/', '', $string);

echo $r;

http://writecodeonline.com/php/でテスト済み

出力

1例

\p{L}任意の言語の任意の文字です。したがって、これは任意の文字に一致します。

\p{Nd}任意の言語の任意の数字です。

詳細については、regular-expressions.infoの Unicode 文字プロパティを参照してください。

于 2012-09-04T14:10:24.397 に答える