PHP Regex - 1个或更多整数的值

时间:2011-05-29 06:37:07

标签: php regex input validation

嘿我正在尝试在PHP中执行输入验证,以确保输入的股票值至少为1正整数且从0到9。不应包含任何特殊字符。

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

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或double。

如果使用正则表达式更容易,那也没关系!

提前致谢:)

5 个答案:

答案 0 :(得分:8)

试试这个正则表达式:

/^\d+$/

现有正则表达式的问题在于它只匹配一个数字的字符串。

验证int或double:

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

请注意,regexp要求至少有一个数字。

答案 1 :(得分:2)

使用:

/^[0-9]+$/

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

/^\d+$/

对于花车,尝试类似:

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

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

为了省去一些麻烦,您还可以使用is_intis_float功能。

最后;请注意您的支票错误。 preg_match如果失败则返回0,因此您应将其写为:

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

(请注意!)。

答案 2 :(得分:1)

您可能想要使用

is_int

答案 3 :(得分: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 {...}

答案 4 :(得分: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;
  }