我需要验证字符串中是否存在数字。这是我用过的代码:
$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';
}
然而,在任何一种情况下,它都不起作用。
答案 0 :(得分:2)
如果 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
范围内。