免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: qmhball
打印 上一主题 下一主题

有什么方法判断一个字串中的字符全为数字吗 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-09-02 00:22 |只看该作者
原帖由 mikespook 于 2007-9-2 01:39 发表
我也顶~~

不过更正一下:如果使用===来判断,会连同判断类型, '100' 和 intvel('100') 将返回false. 而 '100is100' == intvel('100is100') 返回 false 我并没有看出有什么问题. 显然字符串 100is100 并不是整数. '100.100' 会被截取为 100 的整数,显然转化后的值不等于原串,所以,在 ctype 不可用的情况下,凑合一下还是可以的.

楼主显然没有听取意见,去看 ctype 部分的手册.

不过dz902 也不用这么大火气,本来论坛嘛,就是这么个地方. 不光是谈技术,也可能是谈学习方法. 楼主或许还没掌握学习方法,或者没掌握问问题的方法而已~~~那么大的红字,容易吓着别人的~~~


楼上:

如果你认为 '100is100' == intval('100is100') 是 false 的话,那你:第一,没有认真看我的帖;第二,没有认真看手册;第三,没有自己做实验。PHP 是会自己转换类型的,所以 '100is100' 在数字做运算和比较的时候,会自动转成 100,所以 '100is100' == intval('100is100') == 100。


  1. $foo = '100is100';

  2. if (intval($foo) == $foo) {
  3.     echo 123;
  4. }
复制代码


这段代码是会输出 123 的,所以你的方法:第一不能判断 $foo 是否是整数,第二不能判断 $foo 是否全为数字。

另外:

ctype 系列函数从 4.2.0 开始就是默认打开,而且从 4.3.0 开始更是属于内置函数,也就是说,除非 LZ 用的是 4.2.0 以下的版本并且在编译时故意关闭 ctype 函数才会导致函数不可用,否则, ctype 就和 str_replace 一样,一直都是可用的。

最后:

问了问题不用说谢谢,大可不必,但是认真看每个人给你的回复是对回帖的人的基本尊重,问题解决大家都开心,但是明明答案在你面前你直接忽略(注意是直接忽略,而不是看清楚然后再发问),那就是对回帖人不尊重,对看帖的人也不尊重,对于发帖的人(自己)更是不尊重。最重要的是,标准而且正确的答案是在 2 楼,2 楼哦,2 楼,2 楼,就是 LZ 正下方,正下方,眼皮一放就能看到的地方。

又及:

小乔居然愿意花 5 分钟以上写那么大一堆东西然后帖上来也不去看回帖,我很失望。

论坛徽章:
0
22 [报告]
发表于 2007-09-02 13:04 |只看该作者

回复 #18 dz902 的帖子


不要动怒 的确是我的错!
郑重道歉!

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
23 [报告]
发表于 2007-09-02 14:49 |只看该作者
原帖由 dz902 于 2007-9-1 21:08 发表


OK。

首先:intval('100is100') == 100 == '100is100'。错。除非用 ===,但你的回贴用的是 ==。




然后:is_int('100') === false。错。

然后:is_numeric('100.100') === true 以及 is_numer ...


  我那个测试,只是想告诉我帖子里面引用的那一楼:正则的效率并不是很差。
  因为他说:“因为正则的效率不高”。
  而我又是正则的狂热者,呵呵。

  

论坛徽章:
0
24 [报告]
发表于 2007-09-02 14:57 |只看该作者

论坛徽章:
0
25 [报告]
发表于 2007-09-02 16:59 |只看该作者
唉,简单的问题而已,犯不着争来争去的

论坛徽章:
8
申猴
日期:2014-01-01 22:11:07白羊座
日期:2014-11-18 20:53:022015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之四川
日期:2016-01-19 18:39:36综合交流区版块每日发帖之星
日期:2016-06-07 06:20:0015-16赛季CBA联赛之广东
日期:2016-10-30 11:34:40CU十四周年纪念徽章
日期:2016-11-13 10:06:5715-16赛季CBA联赛之同曦
日期:2022-08-28 15:58:19
26 [报告]
发表于 2007-09-02 18:41 |只看该作者
哈哈哈哈!!!!!!!!!!!!!!

论坛徽章:
0
27 [报告]
发表于 2007-09-02 21:57 |只看该作者
原帖由 dz902 于 2007-9-2 00:22 发表


楼上:

如果你认为 '100is100' == intval('100is100') 是 false 的话,那你:第一,没有认真看我的帖;第二,没有认真看手册;第三,没有自己做实验。PHP 是会自己转换类型的,所以 '100is100' 在数字做 ...



我汗,果然,我只测试了 float 的情况,没有测试字符串。

恩,不过鉴于我是狂热的投机取巧者,做一下改动,貌似可以,不知道有没有什么没有测试到的地方:

$foo = '100is100';

if (is_numeric($foo) && $foo == intvel($foo))
{
// int
}

呵呵~~~手册倒是认真看了,不过测试没认真做,该打,该打~~~

论坛徽章:
0
28 [报告]
发表于 2007-09-02 22:25 |只看该作者
原帖由 mikespook 于 2007-9-2 23:57 发表



我汗,果然,我只测试了 float 的情况,没有测试字符串。

恩,不过鉴于我是狂热的投机取巧者,做一下改动,貌似可以,不知道有没有什么没有测试到的地方:

$foo = '100is100';

if (is_numeric($foo) && $foo == intvel($foo))
{
// int
}

呵呵~~~手册倒是认真看了,不过测试没认真做,该打,该打~~~


上面的做法是可以通过 '        10'、 '2e0'、'1.'、'0000001'以及 '100.0000' 这类的测试的,如果 $foo 是直接使用(例如 SQL),那么不行。
另外,其实 LZ 标题和内容都还是比较清楚,就是全要数字,上面的测试不能通过 '111111111111111111111111111111111' 这个测试,而 ctype_digit 可以;而且上面的测试通过了 '        10' 、'2e0'、'1.'、'0000001' 以及 '100.0000',也不符合「字串中的字符全为数字」。

论坛徽章:
0
29 [报告]
发表于 2007-09-03 23:34 |只看该作者
这贴太强了,力顶,收藏


正则效率并不差,尤其是这种简单正则,要是复杂正则倒很难说

论坛徽章:
0
30 [报告]
发表于 2007-09-04 07:32 |只看该作者
正规,或转换成数字,如果有异常出现,那就不是了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP