php带单位字符串怎转整型_正则提数字再转【操作】-php教程

应先用正则提取首个数字片段再转整型:preg_match(‘/[-+]?\d+.?\d*/’, $str, $m) 获取数字,filter_var($m[0], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION) 清洗,最后(int)round((float)$cleaned)转整。

PHP 中带单位字符串怎么安全提取数字转整型

直接用 (int) 或 intval() 强转带单位的字符串(如 "123px"、"45.6kb")会出错或截断不准确——PHP 会在遇到第一个非数字字符时停止解析,但小数点、负号、科学计数法等会让结果不可控。真正可靠的做法是先用正则精准提取数字部分,再转整型。

用 preg_match() 提取最前面连续数字(含负号和小数点)

多数场景要的是“开头的数值”,比如 "-123.45px" → -123(转整型后自动舍小数),这时正则应聚焦数字起始段:

  • preg_match('/^[-+]?\d*\.?\d+/', $str, $matches) 可匹配带符号、可选小数点的数字前缀
  • 但注意:它会把 "123.45px" 匹配成 "123.45",(int)"123.45" 得 123,没问题;而 "abc123" 则完全不匹配,返回 false
  • 如果字符串总是「数字在前 + 单位在后」,这个模式足够用;否则得换更宽松的提取逻辑

用 preg_replace() 清洗所有非数字字符(慎用)

有人习惯用 preg_replace('/[^0-9\-\.]/', '', $str) 把所有非数字字符干掉,再强转。这看似简单,但极易翻车:

  • "width: 100px; height: 200px;" → 变成 "100200",完全失真
  • "-5.5°C" → "-5.5" 还行,但 "1e3kg" 会被清成 "1e3",而 (int)"1e3" 是 1(PHP 不识别科学计数法字符串转 int)
  • 单位里带连字符(如 "2x3")、负号(如 "−10℃" 使用全角减号)也会漏判

推荐组合:正则找首个有效数字 + filter_var() 安全转整型

兼顾健壮与语义,建议分两步走:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » php带单位字符串怎转整型_正则提数字再转【操作】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4024055+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4024055+
  • 本周更新: 0+
  • 最后更新: 2026-03-16