我正在检查整数和浮点数的验证。 预浸料( '/ ^ [0-9] +([0-9] +)?$ /',$ STR) 这很好用 12,12.05 但不适用于.12
有什么建议吗?
提前致谢, 库马尔。
答案 0 :(得分:5)
制作
preg('/^[0-9]*(\.[0-9]+)?$/',$str)
+
表示该元素将重复一次或多次,*
表示该元素将重复零次或多次。
答案 1 :(得分:1)
然而,is_numeric
几乎涵盖了两者<?php
$tests = array(
"42",
1337,
"1e4",
"not numeric",
array(),
9.1
);
foreach ($tests as $element) {
if (is_numeric($element)) {
echo "'{$element}' is numeric", PHP_EOL;
} else {
echo "'{$element}' is NOT numeric", PHP_EOL;
}
}
?>
输出:
'42' is numeric
'1337' is numeric
'1e4' is numeric
'not numeric' is NOT numeric
'Array' is NOT numeric
'9.1' is numeric
浮动示例:
<?php
if (is_float(27.25)) {
echo "is float\n";
} else {
echo "is not float\n";
}
var_dump(is_float('abc'));
var_dump(is_float(23));
var_dump(is_float(23.5));
var_dump(is_float(1e7)); //Scientific Notation
var_dump(is_float(true));
?>
is float
bool(false)
bool(false)
bool(true)
bool(true)
bool(false)
和Is_int示例:
<?php
if (is_int(23)) {
echo "is integer\n";
} else {
echo "is not an integer\n";
}
var_dump(is_int(23));
var_dump(is_int("23"));
var_dump(is_int(23.5));
var_dump(is_int(true));
?>
is integer
bool(true)
bool(false)
bool(false)
bool(false)
答案 2 :(得分:0)
是的,试试这个:
if((int) $str != $str)
{
//error
}
if((float) $str != $str)
{
//error
}
这应该可以解决问题,我想它会比正则表达式更快。另外,您可以在(float) $str <= 0
- &gt;之后查看。另一个错误,等等。
我会打赌正则表达式用于更复杂的验证,其中使用标准例程,您必须编写一些代码块,例如电子邮件验证,掩码(模式)输入等。
答案 3 :(得分:0)
<?php
$regex = '~^(\d+)|(\d+)?\.(\d+)$~';
$input = array( '12', '12.05', '.12' );
foreach( $input as $string ) {
echo "Match " . ( preg_match( $regex, $string ) !== 0 ? "OK" : "NOT OK" ) . "\n";
}
答案 4 :(得分:0)
您可以使用PHP的 is_float 和 is_int 功能验证号码..
答案 5 :(得分:0)
我建议PHP中的is_numeric
函数具有比regex
函数更好的性能。
is_numeric
对所有这些项都返回true:
$s = 123;
$s = '123';
$s = 123.456;
$s = '.456';
$s = '-.456';
您可以在行动here中看到它。