在日常的开发中,经常需要从字符串中截取出想要的内容,这时候,字符串函数substr就可以派上用场了。
substr函数是一种常用的字符串截取函数,它可以从指定的字符串中截取出一段子字符串,常用于处理字符串中的关键信息,或将长字符串切割成小块进行处理。下面我们来深入剖析substr函数的用法。
一、substr函数的基本用法
substr函数的基本语法如下所示:
string substr (int $start, int $length)
其中,$start参数表示开始截取位置的索引,$length参数是所要截取子字符串的长度。
如果只传入$start参数,则截取起点为$start索引,长度则默认截取到字符串尾部,即从$start到字符串最后一个字符的子字符串。
如果$start参数为正数,则从左侧开始计数,即从字符串开头往后数;
如果$start参数为负数,则从右侧开始计数,即从字符串结尾往前数。
如果$length参数为正数,则截取子字符串长度为$length;
如果$length参数为负数,则表示截取到字符串结尾之前的$length个字符。
如果$length参数的长度大于被截取字符串的长度,则截取到字符串结尾。
substr函数的返回值是被截取的子字符串。
下面我们来看一些例子,更好地理解substr函数的用法。
示例一:
$str = 'abcdefg';
//从第3个字符(c)开始截取到字符串结尾
echo substr($str, 2);
//输出结果:cdefg
//从第3个字符(c)开始截取4个字符
echo substr($str, 2, 4);
//输出结果:cdef
示例二:
$email = 'john.doe@example.com';
//从@符号(不包含)往后截取所有字符
echo substr($email, strpos($email, '@'));
//输出结果:@example.com
二、substr函数的应用场景
substr函数常用于从字符串中提取关键信息。下面列举一些在实际开发中常见的应用场景。
1、截取文件后缀名
在文件上传的应用场景中,我们可能需要对上传的文件进行格式校验,这时候就需要截取文件的后缀名,然后进行比对。
假设我们上传的文件名为“test.jpg”,这时候我们可以通过substr函数,从字符串中截取出文件后缀名,代码如下所示:
$file = 'test.jpg';
$file_ext = substr($file, strrpos($file, '.') + 1);
echo $file_ext;
这里用到了strrpos函数,用于获取字符串中最后一个"."的位置,它是从右往左查找的。
2、截取用户名
在用户登录模块中,我们一般需要对用户输入的用户名进行校验,例如判断用户名是否符合格式规范等。这时候就需要从字符串中截取出用户名,代码如下所示:
$username = 'john.doe';
//截取用户名
if (substr_count($username, '.') > 0) {
$username = substr($username, 0, strpos($username, '.'));
}
echo $username;
3、截取URL中的参数
在访问某些页面时,我们可能需要将一些参数传递给服务器处理,这时候可以将参数放在URL中,然后在服务器端通过$_GET超全局变量获取。
例如访问以下URL时:
http://www.example.com/index.php?name=john&age=18
可以通过substr函数,从URL中截取出参数部分,代码如下所示:
$url = 'http://www.example.com/index.php?name=john&age=18';
//截取URL中的参数
$query_string = substr($url, strpos($url, '?') + 1);
echo $query_string;
4、截取字符串中的数字
在某些应用场景中,我们需要将字符串中的数字提取出来,例如截取字符串中的电话号码、身份证号码等。
假设我们需要从以下字符串中提取出"996"这个数字,代码如下所示:
$str = 'work 996, life 365';
//提取字符串中的数字
$number = substr(preg_replace('/[^0-9]/', '', $str), 0, 3);
echo $number;
这里用到了正则表达式,先用preg_replace将字符串中非数字字符替换为空字符串,再通过substr函数获取前三个数字。
三、substr函数的注意事项
1、在使用substr函数时,要注意$start和$length参数的传入值是否正确,避免截取的子字符串不完整。
2、$start参数可以为负数,但是$length参数不支持负数。
3、substr函数天生支持中文截取。
4、substr函数并不影响原始字符串,截取后的子字符串作为返回值返回,需要接收并赋值。
四、总结
substr函数是一种非常常用的字符串截取函数,可以从指定的字符串中截取出所需要的子字符串,常见应用于文件操作、用户登录和数据处理等场景。在使用substr函数时,需要注意细节和各参数的用法,以确保截取的子字符串是正确的。