php - 如何在 PHP 中查找 unicode 字符类

标签 php regex unicode

我很难找到一种方法来获取字符的 unicode 类。

Unicode 类列表:https://www.php.net/manual/en/regexp.reference.unicode.php

所需的 python 函数:https://docs.python.org/3/library/unicodedata.html#unicodedata.category

我只想要与此 python 函数等效的 PHP。

例如,如果我这样调用 x 函数:x('-') 它会返回 Pd,因为 Pd 是连字符所属的类。

谢谢。

最佳答案

一种可能的方法是使用 IntlChar::charType .不幸的是,此方法仅返回一个 int,但此 int 是 IntlChar class 中定义的常量。 . 30 个类别的所有常量都在 0 到 29 的范围内(没有间隙)。结论,您所要做的就是构建一个遵循相同顺序的索引数组:

$shortCats = [
    'Cn', 'Lu', 'Ll', 'Lt', 'Lm', 'Lo',
    'Mn', 'Me', 'Mc', 'Nd', 'Nl', 'No',
    'Zs', 'Zl', 'Zp', 'Cc', 'Cf', 'Co',
    'Cs', 'Pd', 'Ps', 'Pe', 'Pc', 'Po',
    'Sm', 'Sc', 'Sk', 'So', 'Pi', 'Pf'
];

echo $shortCats[IntlChar::charType('-')]; //Pd

注意:如果怕以后类中定义的数值发生变化,想更严谨一些,也可以这样写数组:

$shortCats = [
    IntlChar::CHAR_CATEGORY_UNASSIGNED => 'Cn',
    IntlChar::CHAR_CATEGORY_UPPERCASE_LETTER => 'Lu',
    IntlChar::CHAR_CATEGORY_LOWERCASE_LETTER => 'Ll',
    IntlChar::CHAR_CATEGORY_TITLECASE_LETTER => 'Lt',
    // etc.
];

关于php - 如何在 PHP 中查找 unicode 字符类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71093776/

相关文章:

php - PDO 的 FETCH_INTO $这个类不起作用

javascript - 在 Javascript 代码中重复 PHP

php - 单元测试 Laravel 密码重置电子邮件 - 可邮寄未排队

java - 正则表达式如何匹配所有标点符号但排除某些条件

emacs - Emacs 中 § 符号的键绑定(bind)

python - 'Ascii' 编解码器无法在位置 186 : ordinal not in range(128) 对字符 u'\u201d' 进行编码

php - MySql 数据库真的有一些限制吗?

javascript - 使用正则表达式删除 Google 表格中最后一个正斜杠后的所有内容

python - 是否有与正则表达式的 Perl "/x"修饰符等效的 Python?

python - 如何将 Unicode 组合到 Python 2 输出中?