Reguralexpresion,接受有效浮点数[PHP]

Reguralexpresion,接受有效浮点数[PHP],php,regex,preg-match,conditional,Php,Regex,Preg Match,Conditional,我正在尝试验证一个有效的浮点数。基本上,我希望接受在点或逗号后最多有四个数字的数字: 0,2342 123412,2300 1234.0000 1244 1234,12 1234.12 0.23 我还想拒绝带前导零的数字,但如果0在点或逗号之前,则传递0 01234,1234 00012.2342 01,1234 我使用了这个表达式,但它并没有像我预期的那样起作用: $number_exp = "<^[0]?([^0][0-9]+)?[.|,]?[0-9]{0,4}$>"; $t

我正在尝试验证一个有效的浮点数。基本上,我希望接受在点或逗号后最多有四个数字的数字:

0,2342
123412,2300
1234.0000
1244
1234,12
1234.12
0.23
我还想拒绝带前导零的数字,但如果0在点或逗号之前,则传递0

01234,1234
00012.2342
01,1234
我使用了这个表达式,但它并没有像我预期的那样起作用:

$number_exp = "<^[0]?([^0][0-9]+)?[.|,]?[0-9]{0,4}$>";
$test = '0123,4342';

if(preg_match($number_exp, $test)) return true;
return false;
$number_exp=”“;
$test='01234342';
if(preg_match($number_exp,$test))返回true;
返回false;

任何人都知道如何调节station,使其在且仅当它在分隔符之前独立时才接受0?

您所需要的只是使用捕获分组。您可以使用以下正则表达式:

^(([1-9]+|0|[1-9]+?0)([.,][0-9]{0,4})?)$


还要注意,
[^0]
是一个不正确的正则表达式,因为它将匹配除
0
之外的所有内容,因此它将匹配字符或…

已找到解决方案

$number_exp = "<^([^0][1-9]+)?([0]{1})?[.|,]?[0-9]{0,4}$>";
$number_exp=”“;
但仍然想知道是否有其他方法可以做到这一点

那么:

/^(?:[1-9]\d*|0)(?:[,.]\d[0,4})?$/
说明:

/                   : regex delimiter
^                   : begining of string
    (?:             : start non capture group
        [1-9]       : one digit from 1 to 9
        \d*         : any number of digits from 0 to 9
        |           : OR
        0           : zero
    )               : end of group
    (?:             : start non capture group
        [,.]        : a comma or a dot
        \d[0,4}     : 0 to 4 digits
    )?              : end of group, optional
$                   : end of string
/                   : regex delimiter

出于某种原因,它将接受$test='0234342'@欢迎光临!还有关于
[^0]
的注意事项!顺便说一句,你在这里发布的正则表达式演示工具包不错。因此,我不会让我接受奇克在一分钟内就会给出的答案。ThxIt不匹配
10