如何检测字符串中给定数字的存在

时间:2014-09-04 17:18:42

标签: php string

我需要验证字符串中是否存在数字。这是我用过的代码:

$line='1';
$a=1;
echo strpos($line, $a);
if (strpos($line, 1) !== false) {
    echo 'ok';
}

我也试过这个:

$line='1';
$a=1;
echo strpos($line, $a);
if (strpos($line, 1+'0') !== false) {
    echo 'ok';
}

然而,在任何一种情况下,它都不起作用。

4 个答案:

答案 0 :(得分:2)

来自documentation

  

如果 needle 不是字符串,则会将其转换为整数并应用为字符的序数值。

由于您将1作为needle传递,因此会将其转换为包含该代码的字符,即Control-A。所以它不是在字符串中寻找数字1。如果要查找字符1,则必须使用字符串,而不是整数:

$a = '1';
echo strpos($line, $a);
if(strpos($line, '1') !== false) {
    echo 'ok';
}

如果您最初获得了一个号码,则可以将其转换为strval()的字符串:

$a = 1;
$a = strval($a);
echo strpos($line, $a);
if(strpos($line, $a) !== false) {
    echo 'ok';
}

答案 1 :(得分:1)

strpos适用于字符串。如果你这样做

$line='1234';
$a='1';
echo strpos($line, '1');
if(strpos($line, '1') !== false){
    echo 'ok';
}

$line='1234';
$a='1';
echo strpos($line, $a);
if(strpos($line, $a) !== false){
    echo 'ok';
}

它会起作用

答案 2 :(得分:1)

strpos有三个参数,其中第三个参数是可选的,即 strpos(string,find,start)。这里find应该是字符串类型,如果它不是字符串类型,那么它将被转换为整数并应用为字符的序数值。意味着它需要ascii值字符。例如。

$string="ABC";
$find=65;
$pos=strpos($string,$find);
echo $pos

Output:
0

即角色的位置' A'因为65是' A'的ASCII值。字符。 因此,当您将整数值1传递给strpos函数时,它将转换为某个ASCII字符,并且在您的情况下将返回false。 strpos函数可能返回布尔值为FALSE,但也可能返回非布尔值,其值为FALSE。因此,使用===运算符来测试此函数的返回值。

为了使你的代码正常工作,你必须将整数类型转换为字符串类型。

答案 3 :(得分:0)

也许您可以使用php函数ord(),并检查数字是否在数字的ASCII范围内。