2

我正在使用代码(在底部)来测试一些非美国字符的字符串,返回以下代码:

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

我正在寻找的结果是第一个和第三个转储应该是 0,第二个转储应该是 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 个美国字符,但我需要测试所有字符。我可以做些什么来测试所有字符以获得预期的输出?

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 回答