Fat*_*onk -2 php regex preg-match
我试图在PHP中检查正或负浮点数或整数值,但我无法弄清楚为什么我的正则表达式总是评估为真.
这是代码:
if ( preg_match('/-?[\d]*\.?[\d]*/', "1.57a") ) {
echo "OK: matches";
} else {
echo "Bad: doesn't match";
exit();
}
Run Code Online (Sandbox Code Playgroud)
我已经在几个测试器中测试了regexp模式,并且根据需要匹配和不匹配,但上面的代码/ always /返回1.
我猜这是非常明显的,但我找不到它.
我们来看看你的正则表达式.
-?[\d]*\.?[\d]* 火柴
由于每个部分都是可选的,即使是空字符串也会匹配.由于你没有锚定模式,它将成功匹配字符串中任何位置的零字符.
如果你希望表达式除了数字之外的所有内容都失败,那么你需要做两件事:
锚定模式.分别使用^和$在模式的开头和结尾.如果字符串在错误的位置有错误的字符,这将使字符串不匹配.
制作所需的零件之一. 您的模式的至少一部分需要匹配一次或多次; 否则,它甚至会匹配一个空字符串.
请注意,这些中的任何一个都不够.锚定模式不会排除空字符串,并且制作所需的部分不会使您的模式不匹配whatever0.5.您需要同时执行这两项操作,除非您尝试匹配字符串中任何具有数字外观的部分.(即便如此,你可能还想看看使用\b和/或前瞻/ 外观,以帮助确保你没有像在一个单词中间那样开始或结束古怪的地方.)