我正在使用代码(在底部)为非美国字符测试一些字符串,以下代码返回:
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个美国角色,但我需要测试所有角色。我该怎么做才能测试所有字符以获得我预期的输出?
答案 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]));