首页 > 精选资讯 > 严选问答 >

问 substr 函数用法 字符串截取详解

2026-11-12 21:12:06
最佳答案

答

substr 函数是编程语言里非常常用的字符串截取函数,主流像 PHP JavaScript MySQL 都内置这个函数,核心作用就是从原始字符串里面,按照指定起始位置,截取一段子字符串,很多初学者容易把 substr 和 substring 混淆,两个函数虽然功能类似,但是参数规则和负数位置处理逻辑不一样,substr 的参数设计是起始位置加上截取长度,也就是从哪里开始,一共取多少个字符,这个是它最核心特征,在后端开发 数据库查询 前端文本处理场景高频使用,不同语言里面 substr 函数的下标起始规则,部分是从 0 开始,部分数据库 MySQL 是从 1 开始,这个是最容易踩坑的点,如果下标理解错误,截取出来的结果就会出错,同时还要掌握边界情况,比如长度超出剩余字符 起始下标为负数 长度为 0 这些特殊场景的返回结果。

函数基础语法

基础格式 substr 原字符串 起始位置 截取长度

参数说明

第一个参数 原字符串,也就是待处理的源文本

第二个参数 起始位置,代表开始截取的索引下标

第三个参数 截取长度,代表想要提取的字符总个数,这个参数属于可选参数,如果省略,就会从起始位置一直截取到字符串末尾

底层原理说明

substr 的设计思路是偏移量加长度模式,它不是指定结束下标,而是指定取多长,和 substring 的起止下标模式形成区分,当起始下标设置为负数的时候,含义变成从字符串末尾向前定位起点,也就是倒数第几个字符开始截取,这个特性在 MySQL 和 JS 里面都支持,但是不同语言细节存在差异,比如 JS 的 substr 已经属于不推荐继续使用的旧函数,官方建议替换成 substring 或者 slice,但是项目老代码里面依然大量存在。

操作使用步骤

第一步 确认当前使用的语言或者数据库,确认下标是从 0 还是从 1 计数

第二步 确定原始字符串,选定需要截取的起始位置

第三步 确定需要提取的字符长度,不需要长度就省略第三个参数

第四步 调用 substr 函数,接收返回的子字符串结果

第五步 做边界校验,检查起始下标越界 长度为负等异常情况,预判返回值

不同环境对照表

| 环境 | 下标起点 | 负数起始 | 是否推荐 |

| - | - | - | - |JavaScript|0 | 支持 | 旧版不推荐 |

|MySQL|1 | 支持 | 推荐使用 |

|PHP|0 | 支持 | 推荐使用 |

补充拓展

重点区分 substr 和 substring

substr 起始位置 长度

substring 起始下标 结束下标

举个例子 字符串 abcdef,substr 2 3 得到 cde,substring 2 5 得到 cde,表面结果一样,但是参数含义完全不同,如果第三个参数传负数,两个函数处理逻辑差别很大,substring 会自动把负数转为 0,substr 在部分语言里面负数长度会直接返回空字符串,开发的时候一定要分清,不然很容易出现隐蔽 bug。

【常见问题】

问题 1 substr 函数和 substring 函数用法有什么区别

回答 1 substr 函数用法是起始位置加截取长度,substring 是起始下标加结束下标,二者参数逻辑不一样,是最核心差别

问题 2 MySQL 里面 substr 函数下标是从 0 开始吗

回答 2 MySQL 里面 substr 函数下标不是从 0 开始,是从 1 开始计数,这是 MySQL 的 substr 函数用法很容易出错的地方

问题 3 JS 里面 substr 函数还推荐继续使用吗

回答 3 JS 官方已经不推荐 substr 函数用法,属于遗留旧函数,新项目建议改用 slice 或者 substring,但是老代码仍然可以正常运行

问题 4 substr 函数第三个参数可以省略吗

回答 4 substr 函数第三个截取长度参数可以省略,省略之后 substr 函数用法就是从起始位置一直截取到字符串末尾

【免责申明】

本内容仅作为编程函数知识学习参考,不同版本语言和数据库的 substr 函数细节可能存在更新,请以对应官方文档为准。