2010-06-12 40 views
3

我嘗試使用下面的正則表達式來檢查字符串是否與任一零個小數的正數,或2個正數:PHP正則表達式爲0或2位小數

^\d+(\.(\d{2}))?$ 

當我嘗試使用preg_match匹配這個,我得到錯誤:

Warning: preg_match(): No ending delimiter '^' found in /Library/WebServer/Documents/lib/forms.php on line 862

我在做什麼錯?

回答

2

誤差大約是分隔符丟失是/#等,確保你包在分隔符正則表達式:

if (preg_match('/^\d+(\.(\d{2}))?$/', $text)) 
{ 
// more code 
return true; 
} 

或者:

if (preg_match('#^\d+(\.(\d{2}))?$#', $text)) 
{ 
// more code 
return true; 
} 
+1

符不限於'/ '和'#',你可以使用任何非字母數字(不包括空格和反斜線),例如'*','@','|','!',.....都是有效的分隔符。 – nico 2010-06-12 06:48:23

+0

@nico:這是很有用的補充。謝謝 – Sarfraz 2010-06-12 06:51:08

+0

@Sarraz Ahmed:沒​​問題!很高興知道,因爲你實際上搜索'怪異/#/字符串'的時間(嘿,你永遠不會知道!),你可能會發現使用'!'作爲分隔符更容易! :) – nico 2010-06-12 06:54:37

1

對於PHP的preg函數套件,必須使用分隔符指定正則表達式,例如/;例如,/[a-z]/將匹配從az的任何字符。當你給它字符串"^\\d+(.(\\d{2}))?$",它想把正則表達式看作\\d+(.(\\d{2}))?$,由^定界,但它找不到第二個^。因此,修復如"/^\\d+(.(\\d{2}))?$/"那樣簡單您需要修復的另一件事是.;這是一個元字符,它將匹配任何非換行符;在字面上,你需要\.。這給你正則表達式"/^\d+(\.(\d{2}))?$/"。此外,請注意,如果您不想捕獲組,則可以使用"/^\d+(?:\.(\d{2}))?$/",這將使小數點後的數字位於$1而不是$2