统计字符串中英文字符和数字个数可用ctype函数或正则表达式:ctype_alpha()和ctype_digit()逐字符判断并累加,或用preg_match_all('/[a-zA-Z]/', $str, $letters)和'/\d/'分别提取计数;需注意参数类型、编码兼容性及空值处理,返回['letters'=>n,'digits'=>m]格式数组。

要统计字符串中英文字符和数字的个数,核心是遍历每个字符并判断其类型。PHP 提供了多种内置函数(如 ctype_alpha()、ctype_digit())或正则表达式方式来高效识别,避免手动比对 ASCII 码。
使用 ctype 函数逐字符判断
ctype_alpha() 判断是否为英文字母(a–z 或 A–Z),ctype_digit() 判断是否为数字(0–9)。注意:这两个函数只接受单字节字符串,且参数必须是字符串类型(单个字符也要转成字符串)。
- 先用
str_split($str)将字符串拆成字符数组 - 遍历数组,对每个字符调用
ctype_alpha($char)和ctype_digit($char) - 分别累加计数器,注意跳过空格、标点、中文等非目标字符
用正则表达式一次性提取匹配项
更简洁的方式是用 preg_match_all() 分别匹配英文字符和数字:
-
preg_match_all('/[a-zA-Z]/', $str, $letters)→ 获取所有英文字母,count($letters[0])即个数 -
preg_match_all('/\d/', $str, $digits)→\d等价于[0-9],count($digits[0])即数字个数 - 正则方式不依赖字符编码,对 UTF-8 中的英文/数字依然有效(前提是字符串本身编码正确)
注意事项与边界情况
中文字符、全角数字(如“1”)、下划线、空格、制表符等不会被上述方法计入。若需兼容全角数字,需额外匹配 /[\x{ff10}-\x{ff19}]/u(需加 u 修饰符);但题目明确是“数字”,通常指 ASCII 数字 0–9,无需扩展。
立即学习“PHP免费学习笔记(深入)”;
- 确保输入字符串已用
trim()处理首尾空白(可选,不影响统计逻辑) - 空字符串、null、false 输入需提前判断,避免警告
- 函数应返回关联数组,如
['letters' => 12, 'digits' => 5],便于调用方使用
不复杂但容易忽略细节。写完建议用含混合内容的测试字符串验证,比如 "Hello世界123!@#abc45",预期英文字母 8 个(H,e,l,l,o,a,b,c),数字 5 个(1,2,3,4,5)。



















