gpt4 book ai didi

PHP - 如何正确计算多字节/UTF-8 字符串中的前导空格数

转载 作者:行者123 更新时间:2023-12-05 05:15:35 26 4
gpt4 key购买 nike

我有 UTF-8 字符串,如下所示:

21 世纪

其他语言

一般集合

古代语言

中世纪语言

多位作者(两种或更多语言)

如您所见,字符串包含字母数字字符以及前导空格和尾随空格。

我想使用 PHP 检索每个字符串中前导空格(而非尾随空格)的数量。请注意,这些空格可能是非标准的 ASCII 空格。我尝试使用:

var_dump(mb_ord($space_char, "UTF-8"));

其中 $space_char 包含我从上述字符串之一复制的示例空格字符,我得到 160 而不是 32。

我试过:

strspn($string,$cmask); // $cmask contains a string with two space characters with 160 and 32 as their Unicode code points.

但我得到一个非常不可预测的值。

值应该是:

(1) 12
(2) 6
(3) 9
(4) 9
(5) 9
(6) 12

我做错了什么?

最佳答案

我会走正则表达式路线:

<?php
function count_leading_spaces($str) {
// \p{Zs} will match a whitespace character that is invisible,
// but does take up space
if (mb_ereg('^\p{Zs}+', $str, $regs) === false)
return 0;
return mb_strlen($regs[0]);
}

$samples = [
'            21st century ',
'      Other languages ',
'         General collections ',
'         Ancient languages ',
'         Medieval languages ',
'            Several authors (Two or more languages) ',
];

foreach ($samples as $i => $sample) {
printf("(%d) %d\n", $i + 1, count_leading_spaces($sample));
}

输出:

(1) 12(2) 6(3) 9(4) 9(5) 9(6) 12

关于PHP - 如何正确计算多字节/UTF-8 字符串中的前导空格数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51447628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com