2010-06-12 95 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