php判断字符串长度包含数字算吗_php数字字符长度计算【教程】
技术百科
雪夜
发布时间:2026-01-27
浏览: 次 strlen()按字节计算字符串长度,ASCII字符(数字、字母、符号)各占1字节,中文等UTF-8多字节字符则返回字节数而非字符数;需用mb_strlen()获取真实字符数。
PHP 中 strlen() 计算数字字符和字母一样,按字节算
strlen() 不区分字符类型,它只数字符串占用的字节数。数字(如 "123")、英文字母、符号(如 "@#")在 ASCII 范围内都占 1 字节,所以 strlen("123") 返回 3,strlen("abc123") 返回 6。
常见误解是以为“数字不算字符”或“数字长度特殊处理”,其实完全不需要——只要字符串编码是 UTF-8 且内容全是 ASCII 字符(0–127),strlen() 就准确反映“可见字符个数”。
- 中文、日文、emoji 等非 ASCII 字符在 UTF-8 下占多字节(如中文通常占 3 字节),
strlen()会返回字节数而非“字符数”,这时不能用它判断“有几个汉字” - 如果字符串可能含中文,改用
mb_strlen($str, 'UTF-8') - 空格、制表符
"\t"、换行符"\n"都算 1 字节,会被计入长度
判断字符串是否“只含数字”不能只靠长度
长度只是基础信息,判断“是否为纯数字”得用逻辑校验,不是看 strlen() 返回值。比如 "000" 长度是 3,但它是合法数字;"12a" 长度也是 3,却不是纯数字。
- 推荐用
ctype_digit($str):要求非空、全由 ASCII 数字组成、不能有前导空格或符号 - 想允许负号或小数点?用正则:
preg_match('/^-?\d+(\.\d+)?$/', $str) -
is_numeric($str)范围太宽,会把"1e4"、" 123 "也判为 true,慎用于表单校验
UTF-8 中文混排时,strlen() 和 mb_strlen() 结果不同
例如 $str = "abc你好123";:
strlen($str) // 返回 12(a/b/c 各 1 字节,"你好"各 3 字节,1/2/3 各 1 字节 → 3 + 6 + 3 = 12) mb_strlen($str, 'UTF-8') // 返回 9(3 英文 + 2 中文 + 3 数字 = 9 个字符)
如果你要限制用户输入“最多 10 个字符”,应该用 mb_strlen();如果要做底层协议拼包或计算内存占用,才用 strlen()。
- 不指定
mb_strlen()的第二个参数,可能因默认编码非 UTF-8 导致结果异常 - PHP 8.0+ 可设默认内部编码:
mb_internal_encoding('UTF-8');,之后mb_strlen($str)可省略第二个参数 - 数据库字段长度限制(如
VARCHAR(255))通常按字符数计,对应mb_strlen(),不是strl
en()
实际校验场景:用户名/密码长度 + 字符类型组合判断
比如要求“6–20 位,必须含数字和字母”:
- 先用
mb_strlen($str, 'UTF-8')判断总长度,避免中文被误判超长 - 再分别检查:
preg_match('/[a-zA-Z]/', $str)和preg_match('/\d/', $str) - 注意不要用
strlen()替代mb_strlen()做长度拦截,否则用户输两个汉字就卡在“长度不足6” -
前端 JS 的
.length对中文也是按 Unicode 字符计(类似mb_strlen),前后端校验逻辑要对齐
真正容易出错的不是“数字算不算长度”,而是混用 strlen() 和 mb_strlen()、忽略编码上下文、以及把“长度校验”和“字符类型校验”当成一回事。
# 后端
# js
# 编码
# 字节
# 内存占用
# 字符串
# git
# 前端
# php
# Length
# strlen
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么设置默认邮件客户端 Win11修改M
- Go 语言标准库为何不提供泛型切片的 Contai
- Win11怎么关闭键盘按键音_Win11禁用打字声
- Win11怎么查看显卡显存_查询Win11显卡详细
- 如何用::实现工具类方法调用_php静态工具类设计
- Win10怎么卸载金山毒霸_Win10彻底卸载金山
- 如何在 Go 中调用动态链接库(.so)中的函数
- Windows10电脑怎么设置自动连接WiFi_W
- 如何使用Golang实现RPC序列化与反序列化_G
- Win10怎样卸载TeamViewer_Win10
- Win11怎么关闭任务栏小组件_Windows11
- php订单日志怎么在swoole写_php协程sw
- c++ reinterpret_cast怎么用 c
- Win10如何备份注册表_Win10注册表备份步骤
- Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系
- PyTorch DDP 多进程训练在 Kaggle
- C++中引用和指针有什么区别?(代码说明)
- php后缀怎么变mp4能播放_让php伪装mp4正
- Win11怎么设置右键刷新选项_Windows11
- Win11笔记本怎么看电池健康度_Win11电池报
- PHP怎么接收前端传的时间戳_处理时间戳参数转换技
- 如何用正则表达式精确匹配“start”到“end”
- Win11怎么自动隐藏任务栏_Win11全屏显示设
- c++输入输出流 c++ cin与cout格式化输
- Win11蓝牙开关不见了怎么办_Win11蓝牙驱动
- 如何高效删除 NumPy 二维数组中所有元素相同的
- Win11怎么恢复出厂设置_Win11重置此电脑保
- Python爬虫项目实战教程_Scrapy抓取与存
- Windows蓝屏错误0x0000002C怎么解决
- 如何使用Golang操作指针变量_Golang解引
- 如何使用Golang模拟请求超时_Golang c
- Win11摄像头无法使用怎么办_Win11相机隐私
- c# 在高并发下使用反射发射(Reflection
- c++20的std::format怎么用 比pri
- Go 中 := 短变量声明的类型推导机制详解
- c# Task.ConfigureAwait(tr
- mac怎么安装adb_MAC配置Android A
- 如何使用Golang benchmark测量函数延
- Win11此电脑不在桌面上_Windows 11桌
- 如何在Golang中实现CI/CD流水线自动化测试
- 如何提升Golang程序I/O性能_Golang
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- Win11色盲模式怎么开_Win11屏幕颜色滤镜设
- Win11如何关闭游戏模式 Win11禁用Xbox
- PHP的FastAdmin架构适合二次开发吗_特点
- Win11讲述人怎么关闭_Win11误触开启语音朗
- Django密码修改后会话失效的解决方案
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- Win11怎样安装网易云音乐_Win11安装网易云
- Windows怎样关闭开始菜单广告_Windows


QQ客服