Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查变量是否有一个数字_Php_Variables_Numbers - Fatal编程技术网

Php 检查变量是否有一个数字

Php 检查变量是否有一个数字,php,variables,numbers,Php,Variables,Numbers,我想检查一个变量是否有一个数字,我只想看看是否有一个,我不在乎它是否还有其他东西,比如: "abc" - false "!./#()" - false "!./#()abc" - false "123" - true "abc123" - true "!./#()123" - true "abc !./#() 123" -true 如果你想知道这是所有的数字,但不是只有一个,那么有很多简单的方法可以做到这一点。谢谢您的帮助。您可以使用以下功能: $result = preg_match("/\

我想检查一个变量是否有一个数字,我只想看看是否有一个,我不在乎它是否还有其他东西,比如:

"abc" - false
"!./#()" - false
"!./#()abc" - false
"123" - true
"abc123" - true
"!./#()123" - true
"abc !./#() 123" -true
如果你想知道这是所有的数字,但不是只有一个,那么有很多简单的方法可以做到这一点。谢谢您的帮助。

您可以使用以下功能:

$result = preg_match("/\\d/", $yourString) > 0;
if (strcspn($_REQUEST['q'], '0123456789') != strlen($_REQUEST['q']))
  echo "true";
else
  echo "false";
strcspn
返回不包含任何整数的部分的长度。我们将其与字符串长度进行比较,如果它们不同,那么肯定有一个整数


无需为此调用正则表达式引擎。

您可以使用此模式使用正则表达式测试字符串:

$isNumeric = preg_match("/\S*\d+\S*/", $string) ? true : false;
这将有助于您:

$numberOfNumbersFound = preg_match("/[0-9]+/", $yourString);

您可以从preg_match函数中获得更多信息,因此请看一下

抓住@Martin的精神,我发现了另一个类似的函数

(strpbrk($var, '0123456789')
e、 g.测试用例

<?php

function a($var) {
    return (strcspn($var, '0123456789') != strlen($var));
}

function b($var) {
    return (strpbrk($var, '0123456789'));
}

$var = array("abc", "!./#()", "!./#()abc", "123", "abc123", "!./#()123", "abc !./#() 123");

foreach ($var as $v) {
    echo $v . ' = ' . b($v) .'<hr />';
}

?>


谢谢,我以前尝试过,但由于某些原因,它不起作用。您可能希望正确地避开反斜杠——这里您依赖的是\d不是有效的转义序列,因此它将被视为您编写了\\d。关于转义,您是对的(虽然我没有依赖某些东西,但我只是忘记了)。更正,谢谢你的提示。@therefromhere:讽刺的是,这甚至被否决了。尽管我认为strcspn()的速度优势在99%的用例中都不相关。oops!花了一分钟来纠正模式,然后大喊大叫!投了反对票。你们是速度快的家伙;如果“asdf 123asdf”就不行了,为什么不直接使用([0-9]+)我想最快的否决票来自我,但不是针对正则表达式,而是针对正则表达式?真:假;(==0也会这样做,如果你坚持$isNumeric是一个布尔值,但是在PHP中,你可以将preg_match result赋值给$isNumeric,然后将$isNumeric作为一个布尔值,sinec任何0都是真的,0是假的。我绝对讨厌if(布尔值)然后是TRUE ELSE FALSE这类代码我对它进行了测试,它成功了。我复制了您提供的同一个字符串:“asdf 123asdf”,它返回了“TRUE”。根据问题的第六个示例,它应该返回TRUE。在正则表达式中,定义模式的方法很多,我确信[0-9]+是正确的,单个\d也是正确的。我在这里推荐的模式也是正确的。我投了反对票,因为在我发布答案的那一刻,我错过了模式中的星号(我想是的).正如他自己所说,因为MasterPeter不喜欢我使用的三元运算符。我对这一个进行了基准测试,它比正则表达式快80%左右。很好——我甚至没有对它进行基准测试,我只是想一定有一个相对简单的字符串函数,我可以使用它,而不是拔出大锤子(regexps)…这个函数对我来说是一个新的函数,可惜它有一个如此可怕的名字(它代表什么?)它非常接近它的反面:strspn。在我看来,这个代码比正则表达式更难理解,这需要做一些工作;)感谢您提供的信息,我以前使用过这些函数,但不是以这种方式使用的。我喜欢跑得更快的东西!谢谢@MartinGeisler,我真的觉得这个函数很有用。然而,我发现另一个函数也以类似的方式工作<代码>(strpbrk($var,'0123456789')例如,在下面附上测试用例。它应该是更快的解决方案完美,那么您只需检查($numberOfNumbersFound>0)谢谢!