【问题标题】:How to test whether a string contains the representation of an integer and nothing else?如何测试字符串是否包含整数的表示而不包含其他内容?
【发布时间】:2016-03-11 10:39:53
【问题描述】:

PHP 中是否有将字符串转换为 int 的函数,但要认真对待“int”。

转换为 int 或 intval 都试图变得聪明并执行其他数学运算,例如舍入。

我有一个解决方案——使用 int cast,然后将 int 转换回字符串。

如果结果相同,则OK,但如果不是,则表示字符串代表其他东西(例如float)。

"2.2" --> 2 --> "2" --> fail
"3" --> 3 --> "3" --> OK

但我想知道是否有一些东西可以在 PHP 中使用?

【问题讨论】:

  • 你的意思是:$number == (string)(int)$number ?
  • @Rizier123,是的(使用===),首先检查$number 中是否有int。
  • 顺便说一句:php 不会试图通过对 2.2 应用任何舍入来变得聪明;它只是停在点上,因为它不是数字,因此不是整数的一部分。
  • @greenoldman 您的问题令人困惑,没有准确解释您的需求。我从来没有见过这么快在一个线程中删除这么多答案。
  • 问题的标题有点误导。当您 转换 字符串时,intval() 和 (int) 都“认真对待“int”。似乎您想测试字符串是否仅包含有效的整数表示形式而没有其他内容。

标签: php type-conversion


【解决方案1】:

您可以使用以下功能:

function StrictIntVal($x)
{
  // If we already have an integer
  if(is_int($x)) return $x;

  // Check we have a string
  if(!is_string($x)) return false;

  // Check the string only contains digits (and optional sign)
  if(!preg_match("/^[\+\-]?\d+$/", $x)) return false;

  return intval($x);
}

【讨论】:

  • 我在字符串的开头添加了一个可选符号的处理。如果你想拥有一个功能,那是不存在的,你必须对其进行编程。例如,对于“+2”或“02”,您当前的方法将失败。
  • 啊,是的,很好 :-)。由于我只需要字符串转换,我将只使用您的正则表达式。感谢您的帮助。
  • @VolkerK 感谢您的推动 :)
  • 在这种情况下也不需要转义+- ;-)
  • @VolkerK,加号为真,减号表示范围:-)
【解决方案2】:

可能您正在寻找函数is_numeric()

http://php.net/manual/en/function.is-numeric.php

会告诉你字符串是否代表数字。

【讨论】:

  • 我不是 :-),引用“'9.1' 是数字”。我说的是整数。
猜你喜欢
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2015-12-22
  • 2018-08-27
  • 2017-05-16
  • 2012-02-18
  • 2011-06-25
相关资源
最近更新 更多