2

コード (下部) を使用して、米国以外の文字の文字列をテストしています。次のコードが返されます。

int(1)
int(1)
int(1)

私が探している結果は、次のように最初と 3 番目のダンプが 0 で、2 番目のダンプが 1 である必要があります。

int(0)
int(1)
int(0)

ここに私のテストコードがあります:

<?php
$str[] = '漢語';
$str[] = 'abc123';
$str[] = '漢語abc123';
var_dump(preg_match("/\p{Common}+/u", $str[0]));
var_dump(preg_match("/\p{Common}+/u", $str[1]));
var_dump(preg_match("/\p{Common}+/u", $str[2]));

現在、1 つの US キャラクターがあるかどうかをテストするだけですが、すべてのキャラクターをテストする必要があります。すべての文字をテストして期待どおりの出力を得るにはどうすればよいですか?

4

1 に答える 1

1

あなたが何を達成したいのか、何を期待しているのかわかりません\p{common}。私はそれを使用したことがなく、そのスクリプトに何が含まれているのかわかりません。

たぶん、次のようなクラス[\p{Latin}\p{Nd}]はあなたが望むものになるでしょうか?

\p{Latin}ラテン文字です。何が含まれているかわかりません。簡単なテストでは、ÖÄÜ なども含まれていることが示されました。

\p{Nd}数字の 0 ~ 9

詳細については、regular-expressions.info の Unicode 正規表現を参照してください。

したがって、これにより期待される結果が得られます。

$str[] = '漢語';
$str[] = 'abc123';
$str[] = '漢語abc123';
var_dump(preg_match("/^[\p{Latin}\p{Nd}]+$/u", $str[0]));
var_dump(preg_match("/^[\p{Latin}\p{Nd}]+$/u", $str[1]));
var_dump(preg_match("/^[\p{Latin}\p{Nd}]+$/u", $str[2]));
于 2012-12-20T22:21:48.697 に答える