PHP提供五种字符串字符分类方法:一、正则匹配;二、逐字符ctype判断;三、mb_*多字节处理;四、规则映射批量匹配;五、array_reduce函数式归类。

如果您需要将字符串中的字符按类型分类并存入数组,例如区分字母、数字、中文、标点等,PHP 提供了多种灵活的处理方式。以下是实现此目标的具体方法:
一、使用正则表达式配合 preg_match_all 分类
该方法通过预定义的 Unicode 正则模式匹配不同字符类别,并将结果分别存入关联数组的对应键中。
1、定义待处理的字符串,例如 $str = "Hello世界123!@#";
2、初始化空数组 $result = ['letter' => [], 'digit' => [], 'chinese' => [], 'punct' => []];
立即学习“PHP免费学习笔记(深入)”;
3、使用 preg_match_all('/[a-zA-Z]/u', $str, $letters); 并将 $letters[0] 赋值给 $result['letter'];
4、使用 preg_match_all('/\d/u', $str, $digits); 并将 $digits[0] 赋值给 $result['digit'];
5、使用 preg_match_all('/[\x{4e00}-\x{9fff}]/u', $str, $chinese); 并将 $chinese[0] 赋值给 $result['chinese'];
6、使用 preg_match_all('/[^\p{L}\p{N}\s]/u', $str, $punct); 并将 $punct[0] 赋值给 $result['punct'];
二、遍历字符串逐字符判断并归类
该方法利用 PHP 内置函数对每个字符进行类型检测,适合需精确控制分类逻辑或扩展自定义类别的情形。
1、将字符串转换为字符数组:$chars = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
2、初始化 $result = ['upper' => [], 'lower' => [], 'digit' => [], 'space' => [], 'other' => []];
3、使用 foreach 循环遍历 $chars 中每个字符 $c;
4、判断 if (ctype_upper($c)),成立则将 $c 推入 $result['upper'];
5、判断 elseif (ctype_lower($c)),成立则将 $c 推入 $result['lower'];
6、判断 elseif (ctype_digit($c)),成立则将 $c 推入 $result['digit'];
7、判断 elseif ($c === ' '),成立则将 $c 推入 $result['space'];
8、否则将 $c 推入 $result['other'];
三、使用 mb_* 函数支持多字节字符的分类
针对含中文、日文、韩文等 UTF-8 字符串,需使用 mb_ 系列函数确保正确识别单个字符而非字节序列。
1、获取字符串长度:$len = mb_strlen($str, 'UTF-8');
2、初始化 $result = ['han' => [], 'hiragana' => [], 'katakana' => [], 'latin' => []];
3、用 for ($i = 0; $i
还木有评论哦,快来抢沙发吧~