2015-05-03 89 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