遇到手机号, PHP 求长度显示 14 位的情况

2018-07-12 16:10:02 +08:00
 caijihui11

echo strlen('18779873531'); //正常显示 11

echo strlen('13605951301 ‬'); //显示 14

这是什么情况? 导致多个服务的手机验证不通过,库入不了。

3206 次点击
所在节点    PHP
15 条回复
kuddy
2018-07-12 16:16:46 +08:00
mb_strlen 多字节字符串 utf8 这些了解下?
cydian
2018-07-12 16:16:48 +08:00
空格?
hahasong
2018-07-12 16:18:31 +08:00
需要 trim 一下,末尾有控制符
wslans
2018-07-12 16:21:31 +08:00
判断前去空格
qiayue
2018-07-12 16:22:44 +08:00
echo json_encode(array($phone)); 看看输出的字符你就知道了
Light3
2018-07-12 16:24:44 +08:00
trim 一下啊 兄弟。。。
你自己都不搞搞输入的字段嘛。。
LeoSocks
2018-07-12 16:24:52 +08:00
第二个明显多了空格。
beaconfire
2018-07-12 16:25:35 +08:00

trim 不一定能处理完,还是正则吧
yksoft1
2018-07-12 16:30:29 +08:00
把字符串用正则把第一个只含有数字和'-'的子串分离出来?
baijunyao
2018-07-12 16:33:38 +08:00
不是空格; trim 去不掉的;正则可以解决;
$phone = '13605951301 ‬';
echo strlen($phone); //15
echo '<hr>';
echo strlen(preg_replace("/\D/", '', $phone)); // 11
xbonline
2018-07-12 16:36:13 +08:00
哈哈哈
baijunyao
2018-07-12 16:40:52 +08:00
在各种 IDE 中看不出来;到了 vim 就原形毕露了;
caijihui11
2018-07-12 17:15:11 +08:00
@kuddy 已经发现问题了,别人复制发过来的号码,这边去输入也是复制的,导致就是 14 位
@baijunyao good,vim,正解
谢谢各位了
正常取值都 trim,后面空格自己去掉了,是字符编码的问题了,避免入坑,别人复制的号码不可信,手敲一边
gclove
2018-07-12 17:45:06 +08:00
@caijihui11 你 14 个字符那里有个额外的编码,16 进制 E2 80 AC
947211232
2018-07-13 08:51:32 +08:00
感觉又一个不谷歌的 novice_phper,天啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX