我试图验证并获得"利率"来自用户输入。
我想接受1% - > 99%,具有0,1或2位小数的能力。我也不介意他们是否包括"%"。
即
我能找到的最好的是
/([0-9]{1,2})%/
但那就像我能得到的那样......任何帮助都会非常感激。
答案 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
所有值均有效