接受有效浮点数的正则表达式 [PHP]

Reguralexpresion which accepts valid float numbers [PHP]

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

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;

任何人都知道如何调整语句以便当且仅当它在定界符之前是独立的时它才会接受 0?

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

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

Demo

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

已经找到解决方法

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

但还是想知道有没有其他方法可以做到?

怎么样:

/^(?:[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