0

我正在检查整数和浮点数的验证。preg('/^[0-9]+(.[0-9]+)?$/',$str) 这工作正常 12,12.05 但不适用于 .12

有什么建议么?

在此先感谢,库马尔。

4

6 回答 6

5

做那个

preg('/^[0-9]*(\.[0-9]+)?$/',$str)

+表示元素将重复一次或多次,*表示将重复零次或多次。

于 2012-08-23T09:46:08.633 回答
1

您可以使用is_floatis_int的组合

然而,两者都几乎被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)
于 2012-08-23T09:46:32.690 回答
0

是的,试试这个:

if((int) $str != $str)
{
    //error
}

if((float) $str != $str)
{
    //error
}

这应该可以解决问题,我想它会比正则表达式更快。此外,您可以在那之后检查(float) $str <= 0-> 另一个错误等。

我会赌正则表达式用于更复杂的验证,其中使用标准例程您必须编写一些代码,例如电子邮件验证、掩码(模式)输入等。

于 2012-08-23T09:46:07.623 回答
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";
}
于 2012-08-23T09:47:37.247 回答
0

您可以使用PHP 的is_floatis_int函数来验证数字..

于 2012-08-23T09:48:04.497 回答
0

我建议PHP 中的函数比函数is_numeric具有更好的性能regex

is_numeric对所有这些项目返回 true:

  1. 整数$s = 123;
  2. 包含整数的字符串$s = '123';
  3. 浮点整数$s = 123.456;
  4. 没有前导零的浮点整数$s = '.456';
  5. 负数$s = '-.456';

你可以在这里看到它的作用。

于 2015-03-01T12:30:39.783 回答