2012-11-09 14 views
2

我有一個表單,我需要檢查一些值是否是整數。這似乎過於複雜。我真的需要正則表達式來檢查輸入字段是否是整數?

我想:

if (is_int($value)) 

這doen't工作:任何值返回false,因爲文字輸入總是發送一個字符串類型變量

if (is_numeric($value)) 

這工作,但只檢查變量是數字。我想知道它是否是一個整數,所以我不想讓1.3被接受。

if (is_int((int) $value)) 

試圖使用is_int,並強制將$ value轉換爲整數。這不工作,要麼

所以,除非有一些其他的解決方案,我不知道,我想唯一的方法就是使用 ereg("^[0-9]*$",$value)

是否有任何這方面的問題(性能?) ,並沒有真正更直接的解決方案嗎?

親切的問候。

+0

您嘗試的不符合功能的說明。這就是爲什麼它不起作用。除了不用手冊做這種類型的作業外,你也沒有搜索。這已被問及之前回答。 – hakre

+0

我不擔心表單驗證的性能。此外,我會考慮添加客戶端驗證,以消除往返服務器。仍然進行服務器端驗證,但是如果您可以消除服務器上的工作,那麼性能比任何請求處理時間的輕微降低都要好。 – Alan

+3

還有['ctype_digit()'](http://php.net/ctype_digit) – mario

回答

4

正如馬里奧指出,ctype_digit()是單一的,功能的路要走:

if (ctype_digit($_POST['value'])) { 
    $for_santity = (int)$_POST['value']; 
} 

簡單。快速。可靠。

+1

謝謝,這項工作很好,這是我正在尋找的單一表達。 – DavidTonarini

+0

如果有人正在使用與ctype_digit不兼容的php版本,他們可以執行if(intval($ _ POST ['value'])> 0){return(floatval($ _ POST ['value'])== intval($ _POST ['value']))? '真假'; }' – bozdoz

+0

'ctype_ *'只需要C(它甚至不像PHP那樣需要)。自4.2版以來,默認情況下已啓用。 –

0

這個怎麼樣,

if(is_numeric($value) && floor($value) != $value) 

性能測量是在這種情況下,太微不足道了。

+0

我沒有想到這一點。太好了!非常感謝你。 – DavidTonarini

+0

不客氣! –

+0

PS:第一個工作,你添加的第二個沒有,正如我在問題中解釋的那樣:這是我嘗試的第一個版本:) – DavidTonarini

0

您可以嘗試定義接收到的信息的數據類型。比方說,你通過POST正從一種形式的信息:

$num_val = (int) $_POST['VALUE_FROM_FORM']; 

,我認爲is_int將返回正確的結果,但你必須確保接收到的結果是數字。

0

在您的PHP中,您可以使用preg_match檢查值,不要使用舊的ereg函數,因爲它們已被棄用。

$id = $_GET['id']; 
if (!preg_match('/^[0-9]*$/', $id)) { 
    // there was an error and the value DIDN'T pass validation 
} else { 
    // continue as everything was OK :) 
} 

您可能需要改變GETPOSTREQUEST,以適應。

+0

您的代碼將空字符串驗證爲正確,將負整數驗證爲不正確。 – Jocelyn

0

的方式我一直處理整數,我預計在1以上(即對於被認爲代表一個無符號的主鍵INT進入增值經銷商):

$var = intval($_POST['form_var']); 
if($var > 0){ 
    echo 'Good'; 
} 
1

可以避開正則表達式(不知道是什麼strpos它在幕後)

if(!strpos($value,'.') && is_numeric($value)) 

你已經基本上覆制ctype_digit()

看來我有道歉,因爲PHP不是我的母語。使用下面,我們不應該重新創建庫函數:
if(ctype_digit())

+0

你基本上覆制了'ctype_digit()'。 –

1

我意識到ctype_digit()是最佳的答案,但我張貼以防萬一有人在使用PHP的版本不支持該功能,這個答案(就像在我的測試案例:Ideone.com):

<?php 
function testInt($a){ 
    if (intval($a)>0) { 
     return (floatval($a)==intval($a)) ? 'true' : 'false'; 
    } 
    return 'false'; 
} 
?> 

這適用於ctype_digit()頁面上列出的示例。

以下是一個在線示例:http://ideone.com/uePQto

相關問題