我正在尝试使用以下正则表达式来检查字符串是否为带零小数位的正数,或者2:
^\d+(\.(\d{2}))?$
当我尝试使用preg_match匹配它时,我收到错误:
警告:preg_match():在第862行的/Library/WebServer/Documents/lib/forms.php中找不到结尾分隔符'^'
我做错了什么?
答案 0 :(得分:2)
错误是关于/
或#
等的分隔符缺失,请确保在分隔符中包装正则表达式:
if (preg_match('/^\d+(\.(\d{2}))?$/', $text))
{
// more code
return true;
}
或者:
if (preg_match('#^\d+(\.(\d{2}))?$#', $text))
{
// more code
return true;
}
答案 1 :(得分:1)
对于PHP的preg
函数套件,必须使用分隔符指定正则表达式,例如/
;例如,/[a-z]/
将匹配a
到z
中的任何字符。当您为其指定字符串"^\\d+(.(\\d{2}))?$"
时,它希望将正则表达式视为\\d+(.(\\d{2}))?$
,由^
分隔,但找不到第二个^
。因此,修复就像"/^\\d+(.(\\d{2}))?$/"
一样简单。您需要解决的另一件事是.
;这是一个元字符,它将匹配任何非换行符;对于文字句号,您需要\.
。这为您提供了正则表达式"/^\d+(\.(\d{2}))?$/"
。另请注意,如果您不想要捕获组,则可以使用"/^\d+(?:\.(\d{2}))?$/"
,这会将小数点后的数字放在$1
而不是$2
。