2015-05-03 46 views
2

我想验证一个有效的浮点数。基本上,我想用点或逗号后最多四个数字来接受数字:Reguralexpresion接受有效的浮点数[PHP]

0,2342 
123412,2300 
1234.0000 
1244 
1234,12 
1234.12 
0.23 

我也想带前导零拒绝的数字,但通过0,如果是对自己点或逗号之前。

,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; 

任何人都知道如何调理statment所以它将接受0,当且仅当它是对自己前分隔符?

回答

2

所有你需要的是捕捉播放分组。你可以使用下面的正则表达式:

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

Demo

还要注意的是[^0]是一个不正确的正则表达式,因为它除了0所以它会匹配一切匹配字符或...

+0

好这出于某种原因将接受$测试= '023,4342'; – DevWL

+1

@GlupiJas不,它没有看到演示https://regex101.com/r/hA7nH0/3 – Kasramvd

+0

它是适用于您的编辑thx – DevWL

0

已经找到解决方案

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

但仍然怀疑是否有其他方法可以做到这一点?

1

如何:

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