2011-05-29 92 views
3

嘿,我试图在PHP中执行输入验证,以确保输入的股票值至少为1个正整数和0-9。不应该包含任何特殊字符。PHP正则表达式 - 一个或多个整数的值

例如,以下任何值应该是有效的:

7 
0 
32 
47534 

以下应是无效的:

asdf 
35/gdf 
../34. 

etc.. 

我使用if语句来检查阳性以下“$ original_stock”的整数值。

if (preg_match("/^[0-9]$/", $original_stock)) 
{ 
    $error .="Original stock must be numerical."; 
} 

此外,我有一个价格字段应该验证为int或双。

如果使用正则表达式有更简单的选择,那也没关系!

感谢提前:)

回答

8

试试这个正则表达式:

/^\d+$/ 

与您现有的正则表达式的问题是,它仅与恰好有一个数字相匹配的字符串。

作为用于验证int或双:

/^\d+\.?\d*$/ 

注意,该正则表达式要求存在至少一个数位。

0

您可能需要使用

is_int 
2

用途:

/^[0-9]+$/ 

+意味着 “一个或多个”。没有它,你的正则表达式只会匹配一个数字。或者你可以使用更简单的变体:

/^\d+$/ 

对于花车,你可以试试:

/^\d+(\.\d{1,2})?/ 

这将匹配一个或多个数字,后面可以跟一个.和一个或两个数字。 (即.12将不匹配。)

为了节省您的一些头痛,您还可以使用is_intis_float函数。

最后;注意你的支票是错的。 preg_match将返回0,如果失败了,所以你应该把它写成:

if (!preg_match("/^\+$/", $original_stock)) { 
    // error 
} 

(注意!)。

+0

我尝试的第一个和第二个,但如果输入是“30”,那么它会导致错误无论哪种方式。 – JheeBz 2011-05-29 06:50:58

+0

你是什么意思“导致错误”?请注意,这些正则表达式要求除了数字之外没有别的东西 - 特别是没有空格。 – Mat 2011-05-29 06:52:32

+0

它与使用“preg_match”函数不匹配,因此将字符串分配给$ error变量。 该号码没有任何空格或其他任何东西。这只是30,直接从数据库中取出。 – JheeBz 2011-05-29 07:00:17

1

不要重新发明比现有车轮慢的车轮,请使用摩托车:is_int

#Assuming $original_stock is a single value... 
if (is_int($original_stock)) { 
    #Valid, do stuff 
} 
else { 
    #Invalid, do stuff 
} 

#Assuming $original_stock is an array... 
$valid = true; 
foreach ($original_stock as $s) { 
    if (!is_int($s)) { 
     $valid = false; 
     break; 
    } 
} 
if ($valid) {...} 
else {...} 
+0

如果输入来自表单,只有'is_numeric','is_int'不会这样做。无论哪种方式,您也正在验证负整数和可能的非整数。 – 2011-05-29 08:29:46

1

我刚碰到这个确切的问题,并使用正则表达式来解决这个问题。
我认为这个问题是你的脱口^。

/^[0-9]$/ 

我把它移到了课堂上,得到了我需要的结果。

function validate_int($subject) 
{ 
    //Pattern is numbers 
    //if it matches anything but numbers, we want a fail 
    $pattern = '/[^0-9]/'; 
    $matches = preg_match($pattern, $subject); 
    if($matches > 0) 
     return false; 
    else 
     return true; 
    }