2014-09-04 60 views
0

我需要驗證字符串中是否存在數字。這是我使用的代碼:如何檢測字符串中給定數字的存在

$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'; 
} 

在這兩種情況下,然而,這是行不通的。

+3

我必須錯過兩種方式是如何不同的。 – 2014-09-04 17:21:31

+1

嘗試'if(strpos($ line,'1')!== false){'改爲。這裏:http://sandbox.onlinephpfunctions.com/code/ca8fcbabf74b56eb553cac71bb82151365d405f5(它不顯示「ok」部分,所以你可以看到不同之處。) – 2014-09-04 17:22:09

+0

對不起,我忘了第二個'0'如果 – 2014-09-04 18:20:05

回答

2

documentation

如果不是字符串,它被轉換爲一個整數,並作爲字符的順序值施加。

既然你傳遞1needle,它被轉換成字符與代碼,即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'; 
} 
+0

+1只是告訴我們,int 1等於Control-A :) – WileTheCoyot 2014-09-04 17:30:39

0

也許您可以使用php函數ord(),並檢查數字是否在ASCII的範圍內。

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'; 
} 

它將工作

1

strpos有三個參數,其中第三個參數是可選的即 strpos(string,find,start)。這裏找到的應該是字符串類型,如果它不是字符串類型,那麼它將被轉換爲整數並作爲字符的序數值應用。意味着它需要它的ascii值字符。例如。字符的

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

Output: 
0 

即位置 'A',因爲65是 'A' 字符的ASCII值。 因此,當您將整數值1傳遞給strpos函數時,它會轉換爲某個ASCII字符,並且在您的情況下它將返回false。 函數strpos可能返回布爾值FALSE,但也可能會返回一個非布爾值,其值爲FALSE。因此,使用===運算符來測試此函數的返回值。

要正確工作您的代碼,您必須將整數類型轉換爲字符串類型。

相關問題