嘿我正在尝试在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。
如果使用正则表达式更容易,那也没关系!
提前致谢:)
答案 0 :(得分:8)
试试这个正则表达式:
/^\d+$/
现有正则表达式的问题在于它只匹配一个数字的字符串。
验证int或double:
/^\d+\.?\d*$/
请注意,regexp要求至少有一个数字。
答案 1 :(得分:2)
使用:
/^[0-9]+$/
+
表示“一个或多个”。没有它,你的正则表达式只匹配一个数字。或者您可以使用更简单的变体:
/^\d+$/
对于花车,尝试类似:
/^\d+(\.\d{1,2})?/
这将匹配一个或多个数字,可选地后跟.
和一个或两个数字。 (即.12
将不匹配。)
为了省去一些麻烦,您还可以使用is_int
和is_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;
}