php判断字符串的长度
① php,一个简单的问题,判断变量字符长度和类型的格式
strlen PHP 内置函数 获取 字符串长度
$alen=strlen($a);
if($alen>6 && $alen<12){
echo '我是6-12之间的字符串';
}else{
echo '我不是6-152之间的字符串';
}
判断数字 可以用PHP 内置函数 is_numeric
if(is_numeric($a)){
echo '是数字';
}else{
echo '不是数字';
}
② PHP字符串长度计算 - strlen()函数使用介绍
strlen()函数和mb_strlen()函数
在PHP中,函数strlen()返回字符串的长度。函数原型如下:
复制代码
代码如下:
int
strlen(string
string_input);
参数string_input为要处理的字符串。
strlen()函数返回字符串所占的字节长度,一个英文字母、数字、各种符号均占一个字节,它们的长度均为1。一个中午字符占两个字节,所以一个中午字符的长度是2。例如
复制代码
代码如下:
<?php
echo
strlen("www.sunchis.com");
echo
strlen("三知开发网");
?>
“echo
strlen("www.sunchis.com");”的运行结果:15
“echo
strlen("三知开发网");”的运行结果:15
这里有一个疑问,一个中文字符不是占2个字节吗?“三知开发网”,明明是五个汉字,运行的结果怎么会是15?
原因出在这里:strlen()计算时,对于一个UTF-8的中文字符,会把它当做长度为3来处理。当出现中英文混排的情况下,怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:
复制代码
代码如下:
int
mb_strlen(string
string_input,
string
encode);
PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。
因此,下面的代码能准确计算出中文字符串的长度:
复制代码
代码如下:
<?php
$str
=
"三知sunchis开发网";
echo
strlen($str)."<br>";
//结果:22
echo
mb_strlen($str,"UTF8")."<br>";
//结果:12
$strlen
=
(strlen($str)+mb_strlen($str,"UTF8"))/2;
echo
$strlen;
//结果:17
?>
原理分析:
strlen()计算时,对待UTF-8的中文字符长度是3,所以“三知sunchis开发网”的长度为5×3+7×1=22
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“三知sunchis开发网”长度为5×1+7×1=12
剩下的就是纯数学问题了,在此就不啰嗦了……
注意:对于mb_strlen($str,'UTF-8'),如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。
③ PHP获取中英混合字符串长度的方法
今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数。
.代码如下:
$str
=
'Hello
world!';
echo
strlen($str); //
输出12
然而在PHP自带的函数中,strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的,在不同的编码情况下,中文所占的字节数是不同的。在GBK/GB2312下,中文字符占2个字节,而在UTF-8下,中文字符占3个字节。
.代码如下:
$str
=
'你好,世界!';
echo
strlen($str); //
GBK或GB2312下输出12,UTF-8下输出18
而我们在判断字符串长度时往往需要判断的是字符的数量,而非字符串所占字节数,如在UTF-8下的这段PHP代码:
.代码如下:
$name
=
'张耕畅';
$len
=
strlen($name);
//
输出
FALSE,因为在UTF-8下三个中文占9个字节
if($len
>=
3
&&
$len
<=
8){
echo
'TRUE';
}else{
echo
'FALSE';
}
那么有什么方便而实用的方法可以获得含中文字符串的长度呢?可以用正则计算出中文字符的个数,在GBK/GB2312编码下除以2,UTF-8编码下则除以3,最后再加上非中文字符串的长度,但这样未免太过麻烦。
WordPress这么一段代码,借鉴如下:
.代码如下:
$str
=
'Hello,世界!';
preg_match_all('/./us',
$str,
$match);
echo
count($match[0]); //
输出9
思想是用正则表达式将字符串分割成单个字符,并直接用count计算出匹配到的字符数,便是我们想要的结果了。
但以上代码在UTF-8编码下并不能处理GBK/GB2312的中文字符串,因为GBK/GB2312的中文字符会被识别为两个字符而计算出来的中文字符数量会翻倍,于是我想到了这么一个办法:
.代码如下:
$tmp
=
@iconv('gbk',
'utf-8',
$str);
if(!empty($tmp)){
$str
=
$tmp;
}
preg_match_all('/./us',
$str,
$match);
echo
count($match[0]);
可兼容GBK/GB2312及UTF-8编码,经小量数据测试通过,但暂未确定是否完全正确,盼有大牛指点一二。
以上本意是为了框架可以兼容多种编码格式,但一般在日常开发中,一个项目是已经可以确定为何种编码的,因此可以使用以下函数来方便地获取字符串长度:
.代码如下:
int
iconv_strlen
(
string
$str
[,
string
$charset
=
ini_get("iconv.internal_encoding")
]
)
④ PHP怎么获取字符串长度
PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员。下面简要的剖析一下PHP对中文字符串长度的处理:
(1)PHP自带的函数如strlen()、mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节;
(2)中文则不然,做中文网站一般会选择两种编码:gbk/gb2312或是utf-8。utf-8能兼容更多的字符,所以受到很多站长的喜爱。gbk与utf-8对中文的编码不同,导致中文在gbk与utf-8编码下所占字节也有差异。
⑤ 用PHP统计字符串长度
PHP 计算字符串长度代码示例如下,具体逻辑在代码中。
<?php
//统计字符串长度,适用中文,字母,数字混编
functionget_strlength($str){
//强字符串统一转换为utf-8格式
$encode=mb_detect_encoding($str,array('ASCII','UTF-8','GB2312','GBK'));
if(!$encode=='UTF-8'){
$str=iconv('UTF-8',$encode,$str);
}
//初始化字符串长度
$count=0;
//循环统计
for($i=0;$i<strlen($str);$i++){
//获取字符串首字母对应的ASCII值
$value=ord($str[$i]);
if($value>127){
$count++;
if($value>=192&&$value<=223){
$i++;
}elseif($value>=224&&$value<=239){
$i=$i+2;
}elseif($value>=240&&$value<=247){
$i=$i+3;
}else{
die('字符串异常!!');
}
}
$count++;
}
return$count;
}
//测试
echoget_strlength("中国人2015年的gdp为:6666");
//25
?>
⑥ 判断是否为指定长度内字符串的php函数
复制代码
代码如下:
//———————————————————————————–
//
函数名:CheckLengthBetween($C_char,
$I_len1,
$I_len2=100)
//
作
用:判断是否为指定长度内字符串
//
参
数:$C_char(待检测的字符串)
//
$I_len1
(目标字符串长度的下限)
//
$I_len2
(目标字符串长度的上限)
//
返回值:布尔值
//
备
注:无
//———————————————————————————–
function
CheckLengthBetween($C_cahr,
$I_len1,
$I_len2=100)
{
$C_cahr
=
trim($C_cahr);
if
(strlen($C_cahr)
<
$I_len1)
return
false;
if
(strlen($C_cahr)
>
$I_len2)
return
false;
return
true;
}
//———————————————————————————–
⑦ PHP如何判断两个字符串长度和其中一个字符串的值
<form method="post">
账号:<input type="text" name="account" /><br />
密码:<input type="password" name="pwd" /><br />
<input type="submit" value="判断" />
</form>
<?php
if(!empty($_POST['account'])){
$acc=$_POST['account'];
$pwd=$_POST['pwd'];
$acc_len=strlen($acc);
$pwd_len=strlen($pwd);
if(is_numeric($pwd)){
if($acc_len==12 && $pwd_len==12){
if($pwd>1000){
echo '正确!';
}
}
}else{
echo '错误!';
}
}
?>
⑧ 用PHP写一个字符长度判断
$text = $_post['text'];
if(strlen($text)<10 || strlen($text)>50){
echo '你输入的内容长度只能在10~50之间';
}else{
echo '恭喜,通过';
}
补充:一般不要再程序里直接用$_POST['text'],要把它先赋给一个变量再用,希望能帮到你!
⑨ php字符串长度如何计算
说明
strlen ( string $string ) : int
返回给定的字符串 string 的长度。
参数
string
需要计算长度的字符串。
返回值
成功则返回字符串 string 的长度;如果 string 为空,则返回 0。
更新日志
版本 说明
5.3.0 Prior versions treated arrays as the string Array, thus returning a string length of 5 and emitting an E_NOTICE level error.
范例
Example #1 strlen() 范例
⑩ php判断字符串长度问题
if(!preg_match("/.{2,30}/",$City)){
exit("请选择城市!");
}
这个是正则表达式的写法,不懂的话建议你学习下正则表达式,开发实用性很高
前后/ 是起始结束符号
. 代表任意字符
{2,30} 前一个内容2次 ~ 30次