trim() 可高效去除字符串首尾指定标点,通过第二个参数传入自定义字符列表,如 .,;:!?'"()[]{}/\,其中 需写为 \,] 需写为 ]。

直接用 trim() 配合自定义字符列表即可高效去除字符串首尾的多余标点符号,无需正则或循环。
明确要清除的标点范围
PHP 的 trim() 支持传入第二个参数,指定需要从两端删除的字符。常见标点如 .,;:!?'"()[]{}/\ 等可一次性列出:
- 注意:反斜杠
和右方括号]在字符列表中需转义(写成\和]</code)</li> <li>连字符 <code>-
若出现在字符列表开头或结尾,无需转义;若在中间,建议前置或后置避免被误认为范围符 - 示例:
trim($str, ".,;:!?'\"().[]{}/\-")
处理 Unicode 标点(如中文顿号、省略号)
默认 trim() 只处理单字节字符,对中文标点(如《》、?、!、,、;、:、…、——)无效。此时需用 preg_replace() 配合 Unicode 属性:
- 去除首部标点:
preg_replace('/^[p{P}p{S}]+/u', '', $str) - 去除尾部标点:
preg_replace('/[p{P}p{S}]+$/u', '', $str) - 合并为一步(首尾同时):
preg_replace('/^[p{P}p{S}]+|[p{P}p{S}]+$/u', '', $str) -
p{P}匹配所有 Unicode 标点,p{S}匹配符号(如 ©、★、→),u修饰符启用 UTF-8 模式
兼顾英文与中文场景的稳妥写法
实际项目中常需兼容中英文混合文本。推荐分两步处理,兼顾性能与覆盖度:
立即学习“PHP免费学习笔记(深入)”;
- 先用 trim() 快速清理 ASCII 标点(速度快、无 PCRE 依赖)
- 再用 preg_replace() 清理剩余 Unicode 标点(精准但稍慢)
- 示例函数:
function trimPunctuations(string $str): string {
$ascii = ".,;:!?'\"().[]{}<>/\-";
$str = trim($str, $ascii);
return preg_replace('/^[p{P}p{S}]+|[p{P}p{S}]+$/u', '', $str);
}
注意边界情况
某些“标点”可能是用户有意保留的(如数字末尾的句点 3.14.、文件名中的点 readme.md),需按业务判断是否过滤:
- 避免过度清洗:不要无差别清除所有标点,优先依据字段语义(如标题、用户名、路径)定制规则
- 空字符串或全标点串(如
!!!)经处理后会返回空字符串,调用方应做好空值检查 - 空白符(空格、制表符等)默认不包含在标点清理中;如需一并去除,可在 trim() 后额外调用 trim() 或使用
trim($str)先清空白



















