我正在尝试验证并从用户输入中获取“利率”。
我想接受 1% -> 99%,并且可以使用 0、1 或 2 位小数。我也不介意它们是否包含“%”。
IE
- 3.2
- 3.45%
- 44%
- 4.00%
我能找到的最好的是
/([0-9]{1,2})%/
但那是我能得到的最接近的......任何帮助将不胜感激。
我正在尝试验证并从用户输入中获取“利率”。
我想接受 1% -> 99%,并且可以使用 0、1 或 2 位小数。我也不介意它们是否包含“%”。
IE
我能找到的最好的是
/([0-9]{1,2})%/
但那是我能得到的最接近的......任何帮助将不胜感激。
尝试使用这个正则表达式:
/(\d{1,2}(\.\d{1,2})?)%?/
<?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 );
}
这个正则表达式应该工作:
/(?<!\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 位的所有数字无效。这也允许百分比数字前后的空格。
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
所有值都有效