0

我正在尝试验证并从用户输入中获取“利率”。

我想接受 1% -> 99%,并且可以使用 0、1 或 2 位小数。我也不介意它们是否包含“%”。

IE

  • 3.2
  • 3.45%
  • 44%
  • 4.00%

我能找到的最好的是

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

但那是我能得到的最接近的......任何帮助将不胜感激。

4

4 回答 4

1

尝试使用这个正则表达式:

/(\d{1,2}(\.\d{1,2})?)%?/
于 2012-06-11T07:43:25.043 回答
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}) 开头 (^)。然后,您可以拥有一个以 . 开头的组。(尽管在荷兰会使用逗号)。然后,它必须后跟一位或两位数字。(.(\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 );
}
于 2012-06-11T07:44:05.580 回答
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 位的所有数字无效。这也允许百分比数字前后的空格。

于 2012-06-11T07:49:22.587 回答
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

所有值都有效

于 2014-08-28T10:50:38.650 回答