REGEX测试字符串中的所有字符

时间:2012-12-20 21:27:30

标签: php regex

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

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个美国角色,但我需要测试所有角色。我该怎么做才能测试所有字符以获得我预期的输出?

1 个答案:

答案 0 :(得分:1)

我不确定你想达到什么,你期望\p{common}匹配什么。我从未使用它,我不确定该脚本中包含的内容。

也许像[\p{Latin}\p{Nd}]这样的课程会更符合您的要求?

\p{Latin}是拉丁字符,不确定它包含哪些内容,快速测试表明,例如ÖÄÜ也包括在内

\p{Nd}数字0-9

有关详细信息,请查看Unicode Regular Expressions on regular-expressions.info

所以,这会带来你期望的结果:

$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]));