preg_match获得利率

时间:2012-06-11 07:38:10

标签: php preg-match

我试图验证并获得"利率"来自用户输入。

我想接受1% - > 99%,具有0,1或2位小数的能力。我也不介意他们是否包括"%"。

  • 3.2
  • 3.45%
  • 44%
  • 4.00%

我能找到的最好的是

/([0-9]{1,2})%/

但那就像我能得到的那样......任何帮助都会非常感激。

4 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式:

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

答案 1 :(得分:1)

<?php

$regex = '~^(\d{1,2})(\.(\d{1,2}))?\%?$~';

$shouldMatch = array(
    '3.2',
    '3.45%',
    '44%',
    '4.00%'
);

foreach( $shouldMatch as $interest ) {
    var_dump( preg_match( $regex, $interest ) );
}

关于正则表达式的解释:它必须以一个或两个数字(\ d {1,2})开始(^)。然后,您可以拥有一个以a开头的组。 (尽管在荷兰会使用逗号)。然后,它必须后跟一个或两个数字。 ((\ d {1,2}))。该组是可选的(?)。然后,有一个可选的百分号(%?),字符串应该在那里结束($)。

编辑:您可能还想使用(更快?)非正则表达式替代方案:

<?php

$shouldMatch = array(
    '3.2',
    '3.45%',
    '44%',
    '4.00%'
);

foreach( $shouldMatch as $interest ) {
    $interest = trim( $interest, '%' );

    var_dump( is_numeric( $interest ) && $interest < 100 );
}

答案 2 :(得分:1)

这个正则表达式应该有效:

/(?<!\d)(\d{1,2}(?:\.\d*)?|\.\d+)%/

对于此数据:.56% 4.45% 99.99999% 0.112% 6% 0% 34% 3.% 99% 100% .% .0% 1.2342343%

它产生:

Array
(
    [0] => Array
        (
            [0] => .56%
            [1] => 4.45%
            [2] => 99.99999%
            [3] => 0.112%
            [4] => 6%
            [5] => 0%
            [6] => 34%
            [7] => 3.%
            [8] => 99%
            [9] => .0%
            [10] => 1.2342343%
        )

    [1] => Array
        (
            [0] => .56
            [1] => 4.45
            [2] => 99.99999
            [3] => 0.112
            [4] => 6
            [5] => 0
            [6] => 34
            [7] => 3.
            [8] => 99
            [9] => .0
            [10] => 1.2342343
        )

)

这是用于匹配来自某些文本的用户输入的解决方案。从文本捕获有点不同,所以我需要%来呈现。

修改

如果您想验证用户输入,假设您在该字段中只需要1个数字。

/^\s*(\d{1,2}(?:\.\d{0,2})?|\.\d{0,2})%?\s*$/

这也将使小数点后超过2位的所有数字无效。这也允许在百分比数字之前和之后的空格。

答案 3 :(得分:0)

 function isPostiveNegativeThreeDecimalNumbersOnly(value) {
      var pattern = /^[-+]?(\d{1,3})(\.(\d{1,3}))?$/;
      return pattern.test(value);
 }

您可以使用负值

验证三个十进制数字

例如

1.2,1.23,1.234,22.1,123.123,-1,-1.122,-222,222

所有值均有效