質問

PHP ではマルチバイトの 'preg' 関数が利用できないので、デフォルトの preg_functions はすべて MB セーフであるということでしょうか?PHPドキュメントには言及が見つかりませんでした。

役に立ちましたか?

解決

PCRE は UTF-8 およびその他の Unicode エンコーディングをサポートできますが、コンパイル時に指定する必要があります。から PCRE 8.0 のマニュアル ページ:

PCRE の現在の実装は、UTF-8 でエンコードされた文字列と Unicode の一般カテゴリ プロパティのサポートを含め、Perl 5.10 にほぼ対応しています。ただし、UTF-8 と Unicode のサポートを明示的に有効にする必要があります。それはデフォルトではありません。Unicode テーブルは Unicode リリース 5.1 に対応します。

PHPは現在使用しています PCRE 7.9;システムのバージョンが古い可能性があります。

見てみると、 PCREライブラリ これは PHP 5.2 に付属しており、Unicode プロパティと UTF-8 をサポートするように構成されているようです。についても同様です 5.3分岐.

他のヒント

PCREサポートは、 'U' 修飾子のためのマニュアルを参照して、箱から出して、UTF8ます。

イラスト(\ XC3 \ XA4ドイツの文字 "A" のためのUTF8エンコーディングである)

  echo preg_replace('~\w~', '@', "a\xC3\xA4b");

このエコー "@@¤@" "\ XC3" と "\ XA4" ので、明確なシンボルとして扱われた。

  echo preg_replace('~\w~u', '@', "a\xC3\xA4b");

(注意 'U')プリント "@@@" "\ XC3 \ XA4" 理由は、単一の文字として扱われた。

いいえ、そうではありません。質問 の例えばPHPでするpreg_matchとUTF-8 を。

を参照してください。

私のより複雑なプリプレグの機能のいくつか:

(1A)検証ユーザ名英数字+下線として

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/',$username) 

(1b)が可能UTF代替ます:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/u',$username) 

(2A)検証の電子メール:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix",$email))

(2B)可能UTF代替

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ixu",$email))

(3A)正規改行

preg_replace("/(\n){2,}/","\n\n",$str);

(3b)が可能UTF代替ます:

preg_replace("/(\n){2,}/u","\n\n",$str);

ドゥthse変化が見大丈夫?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top