PHP之字符串类型与检验

本文深入探讨PHP字符串的表示方式,包括单引号、双引号、heredoc和nowdoc。讲解了不同类型的转换,如数值、布尔、NULL、数组和对象转字符串,以及字符串与其他类型间的转换。同时,文章介绍了常用的字符串函数,如长度计算、查找、大小写转换、截取、加密、过滤和比较等,并提供了多个实际应用案例,帮助开发者更好地理解和运用PHP字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿里云协同办公工具Teambition 0元试用>>> hot3.png

  • 目录
  • 1.前言
  • 2.基本语法表达方式
  • 2.1单引号
  • 2.2双引号
  • 2.3heredoc语法结构
  • 2.4nowdoc语法结构
  • 3.其他类型转换字符类型
  • 3.1数值型转换成字符串型
  • 3.2布尔类型转换成字符串类型
  • 3.3NULL转换成字符串
  • 3.4数组转换成字符串
  • 3.5资源转换成字符串
  • 3.6对象转换成字符串
  • 3.7强制转换和临时转换
  • 3.7.1临时转换
  • 3.7.2永久转换
  • 3.8字符串转换成其他类型
  • 3.9字符串转成布尔类型规律
  • 4.常用字符串函数分类
  • 4.1字符串长度
  • 4.2字符串查找
  • 4.3字符串大小写转换
  • 4.4字符串截取
  • 4.5字符串ASCLL
  • 4.6加密
  • 4.7过滤
  • 4.8比较
  • 4.9拆分/合并
  • 4.10格式化字符串
  • 4.11其他常用
  • 5.一些应用案例
  • 5.1随机取字符串内的数值
  • 5.2验证用户名长度是否符合规范
  • 5.3验证密码是否符合规范
  • 5.4验证邮箱是否符合规范
  • 5.5转换和统一输入的数据格式
  • 5.6验证用户名是否符合规范
  • 5.7验证密码是否一致

1.前言

PHP的字符串是基础的重点,因此掌握字符串的一些定义和函数,有助于我们更好的开发。

代码分享:https://github.com/mtdgclub/stringCase

2.基本语法表达方式

2.1单引号

该表达方式不能解析变量,但能够解析转义符\’和\\

2.2双引号

能够解析所有变量转义符

2.3heredoc语法结构

在代码中可以解析变量,用法如下:

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>

2.4nowdoc语法结构

在代码中不能解析变量,用法如下:

$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;

3.其他类型转换字符类型

3.1数值型转换成字符串型

数值->数值本身
echo 123;
echo ‘<br/>’;
echo 34.5;
echo ‘<br/>’;

up-db0e67367c7464433e6e9611e3c7f3299cf.png

3.2布尔类型转换成字符串类型

echo true;
echo ‘<br/>’;
echo ‘A’,false,’B’;

up-7f7f6724a9e571b122fb212f6bcfe11a3e1.png

注意:false转换成空字符串

3.3NULL转换成字符串

echo ‘C’,null,;D’;

up-a8e27fa805f6ef3f8eb93f2536ea8f1d87f.png

注意:NULL转换成空字符串

3.4数组转换成字符串

$arr=array();
echo $arr;

up-ced852ec836cf0c7b7831558255886700a8.png

报错提示该变量是数组array

3.5资源转换成字符串

$handle=fopen(‘index.php’,’r’);
echo $handle;

up-04785aeb7bbe8cfa7658c03e1e100ae7926.png

3.6对象转换成字符串

$obj= new stdClass;
var_dump($obj);
echo $obj;

up-43a0703c9df6ae03d7fceb94fca81ab8b08.png

对象不能直接转换成字符串

3.7强制转换和临时转换

3.7.1临时转换

$var=123;
$var=23.3;
$res=(string)$var;
var_dump($res,$var);

up-d0cdd19f6d76cdd3d621d72b60d845ccf1e.png

注意:临时转换本身的类型并没有发生变化

3.7.2永久转换

$str=123;
echo gettype($str);

up-100fa2d0595dd99e0782e8ff09ada696dd6.png

$var=12;
settype($var,’string’);
var_dump($var);

up-e6094fcefeef53fe7d0d285cc1afae9ec69.png

3.8字符串转换成其他类型

//取合法数字,如果不是以合法数字开始,转换成0
echo 1+’3king’;//4
echo 1.2+’4abc’;//5.2
echo 3+’2e2’;//203
echo 2+’true’;//2

3.9字符串转成布尔类型规律

首先注意空字符串(’’),字符串0(’0’),”0”,0,0.0,null,array()都是false,而’0.0’字符串是true

4.常用字符串函数分类

4.1字符串长度

strlen($string):得到字符串长度

4.2字符串查找

  • strpos($string,$search[,$offset]):区分大小写的在指定字符串中查找目标字符串第一次出现的位置
  • stripos($string,$search[,$offset]):忽略大小写的在指定字符串中查找目标符串第一次出现的位置
  • strrpos($string,$search[,$offset]):在指定字符串中查找目标字符串最后一次出现的位置
  • strripos($string,$search[,$offset]):忽略大小写的在指定字符串中查找目标字符串最后一次出现的位置
  • strstr|strchr($string,$search[,$before_needle]):查找字符串的首次出现,返回的是字符串从匹配点的剩余部分,如果未找到所搜索的字符串,则返回 FALSE
  • stristr($string,$search[,$before_needle]):忽略大小写的去查找字符串在另一字符串中的第一次出现,并返回字符串的剩余部分
  • strrchr($string,$search):查找指定字符在字符串中的最后一次出现,并返回从该位置到字符串结尾的所有字符
  • str_replace($search,$replace,$string):在指定字符串中查找另外一个字符串,找到之后将其替换成指定字符串(区分大小写)
  • str_ireplace($search,$replace,$string):在指定字符串中查找另外一个字符串,找到之后将其替换成指定字符串(不区分大小写)

4.3字符串大小写转换

  • strtolower($string):返回小写之后的字符串
  • strtoupper($string):返回大写之后的字符串
  • ucwords($string):字符串的单词的首字母大写
  • ucfirst($string):字符串的单词的首字母大写
  • lcfirst($string):字符串的单词的首字母小写

4.4字符串截取

  • substr($string,$start[,$length]):截取字符串
  • substr_replace($string,$replace,$start[,$length]):替换字符串的子串

代码示例:

$string=’abcdef’;
echo substr($string,0,1);//a
echo substr($string,2,2);//cd
echo substr($string,3);//def
echo substr($string,-2);//ef
echo substr($string,-4,-2);//cd
echo substr($string,0,-3);//abc
echo substr($string,-4,-2);//cd

4.5字符串ASCLL

  • ord($char):得到指定字符的ASCII
  • chr($ascii):根据ASCII得到指定的字符

注意:大写A的Dec是65,到90的Z;小写a的Dec是97,到122的z

4.6加密

  • md5($string):计算字符串的md5的散列值,返回32位长度的字符串
  • sha1($string):计算字符串的sha1的散列值,返回40位长度的字符串

4.7过滤

  • trim($string[,$charlist]):默认过滤字符串两端的空格,也可以过滤指定字符串
  • ltrim($string[,$charlist]):过滤字符串左端
  • rtrim|chop($string[,$charlist]):过滤字符串右端
  • strip_tags($string[,$allowTag]):过滤字符串中的HTML标记
  • addslashes($string):使用反斜线引用字符串中的特殊字符
  • htmlentities($string[,$flag=ENT_COMPAT]):将所有字符转换成HTML实体
  • htmlspecialchars($string[,$flag=ENT_COMPAT]):将字符串中的特殊字符转换成HTML实体
  • nl2br($string):将字符串中的\n用<br/>替换

4.8比较

  • strcmp($string1,$string2):比较两个字符串的大小
  • strcasecmp($string1,$string2):忽略大小写的比较字符串的大小
  • strnatcasecmp($string1,$string2):使用自然顺序算法比较字符串
  • strncasecmp($string1,$string2,$len):比较字符串的开始的若干个字符

代码示例:

$str1=’abcdef’;//97
$str2=’ac’;//98
echo strcmp($str1,$str2);
/*
1--$str1>$str2
-1--$str1<$str2
0--$str1=$str2
*/

4.9拆分/合并

  • explode($delimiter,$string):将指定字符串拆分成数组
  • implode|join($delimiter,$array):以指定分隔符将数组中的键值连接成字符串
  • str_split($string[,$split_length=1]):将字符串转换成数组

4.10格式化字符串

  • printf($format[,$args]):格式化输出字符串
  • sprintf($format[,$args]):格式化输出字符串

4.11其他常用

  • strrev($string):反转字符串
  • str_shuffle($string):随机打乱字符串
  • str_repeat($string):重复字符串
  • str_getcsv($input[,$delimiter=','[,$enclosure=''[,$escape='\\']]]):解析CSV字符串为一个数组
  • parse_str($str[,$arr]):将字符串解析成多个变量

5.一些应用案例

5.1随机取字符串内的数值

/**
 * 随机取字符串内的数值
 * mt_rand(从那个位置开始取,取值的长度)
 * @param int $length
 * @return string
 */
public function getRandString($length=4){
    $string='abcdefghijklmnopqistuvwsyz';
    $str = '';
    for ($i=0;$i<$length;$i++){
        $str.= $string{mt_rand(0,strlen($string)-1)};
    }
    return $str;
}

5.2验证用户名长度是否符合规范

/**
 * 检测用户名长度是否符合要求6-10
 * @param $username
 * @return array
 */
public function checkUserName($username){
   $userLen = strlen($username);
   if($userLen<6||$userLen>10){
       $data = ['code'=>'error','msg'=>'用户名长度不符合规范','data'=>''];
   }else{
       $data = ['code'=>'ok','msg'=>'用户名长度符合规范','data'=>''];
  }
    return $data;
}

5.3验证密码是否符合规范

/**
 * 验证密码是否符合规范
 * @param $password
 * @return array
 */
public function isPassword($password){
    $pwdLen = strlen($password);
    if($pwdLen==0){
        $data = ['code'=>'error','msg'=>'密码不能为空','data'=>''];
    }elseif($pwdLen<6||$pwdLen>10){
        $data = ['code'=>'error','msg'=>'密码长度不符合规范','data'=>''];
    }else{
        $data = ['code'=>'ok','msg'=>'密码符合规范','data'=>''];
    }
    return $data;
}

5.4验证邮箱是否符合规范

/**
 * 验证邮箱是否符合规范
 * @param $email
 * @return array
 */
public function checkEmail($email){
    if(strpos($email,'@')==false){//@在字符串第一次出现的位置
        $data = ['code'=>'error','msg'=>'非法邮箱','data'=>''];
    }else{
        $data = ['code'=>'ok','msg'=>'邮箱符合规范','data'=>''];
    }
    return $data;
}

5.5转换和统一输入的数据格式

/**
 * 转换和统一输入的数据格式
 * @param $string
 * @return string
 */
public function changeStyle($string){
    //trim表示去掉两边的空格
    //strtolower表示将字符串全部小写
    $string = trim(strtolower($string));
    return $string;
}

5.6验证用户名是否符合规范

/**
 * 验证用户名是否符合规范
 * 大写的A~Z的ASCII码是:65~98
 * 小写的a~z的ASCII码是:97~122
 * ord()函数可以获得某字符的ASCII码
 * @param $username
 * @return array
 */
public function checkUserNameString($username){
    $ascil = ord($username);
    if(!(($ascil>=65&&$ascil<=90)||($ascil>=97&&$ascil<=122))){
        $data = ['code'=>'error','msg'=>'用户名不符合规范','data'=>''];
    }else{
        $data = ['code'=>'ok','msg'=>'用户名符合规范','data'=>''];
    }
    return $data;
}

5.7验证密码是否一致

/**
 * 验证密码是否一致
 * strcmp()是比较两个字符串的大小,当全等于的时候为0
 * @param $password
 * @return array
 */
public function checkPassword($password,$pwd){
    if(strcmp($password,$pwd)!==0){
        $data = ['code'=>'error','msg'=>'两次密码不一致','data'=>''];
    }else{
        $data = ['code'=>'ok','msg'=>'密码一致','data'=>''];
    }
    return $data;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值