- 目录
- 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/>’;
3.2布尔类型转换成字符串类型
echo true; echo ‘<br/>’; echo ‘A’,false,’B’;
注意:false转换成空字符串
3.3NULL转换成字符串
echo ‘C’,null,;D’;
注意:NULL转换成空字符串
3.4数组转换成字符串
$arr=array(); echo $arr;
报错提示该变量是数组array
3.5资源转换成字符串
$handle=fopen(‘index.php’,’r’); echo $handle;
3.6对象转换成字符串
$obj= new stdClass; var_dump($obj); echo $obj;
对象不能直接转换成字符串
3.7强制转换和临时转换
3.7.1临时转换
$var=123; $var=23.3; $res=(string)$var; var_dump($res,$var);
注意:临时转换本身的类型并没有发生变化
3.7.2永久转换
$str=123; echo gettype($str);
$var=12; settype($var,’string’); var_dump($var);
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; }