在阅读here之后并尝试了preg_quote之后,我理解了该错误,并且了解到必须使用定界符。
问题是分隔符之一是正斜杠,它也是我要比较的字符串的一部分。我不知道如何解决我的问题。我应该在代码中的哪里放置分隔符?
我正在使用preg_match来标识具有以下产品名称的给定产品:
if (preg_match("/\b$productcolor\b/i", "$searchProductName")) {
//do something
}
如果产品名称看起来像这样,则效果很好:
$searchProductName = Yupoong 6606 Retro Trucker Cap (Red);//$_POST
$productcolor = 'Red';//$_POST
如果 Preg_match
的名称中带有正斜杠,则返回未知修饰符:
$searchProductName = Yupoong 6606 Retro Trucker Cap (Rust Orange/ Khaki);//$_POST
$productcolor = 'Rust Orange/ Khaki';//$_POST
我正试图通过消除像这样的正斜杠来克服这个问题:
$productColor = str_replace('/', ' ', $productcolor);
这将返回类似Rust Orange Khaki
的字符串。但是,删除正斜杠会使preg_match
与名称中的颜色不匹配。
如何解决此问题?请注意,并非所有产品的名称都带有正斜杠。有些只有单色。
答案 0 :(得分:1)
preg_quote
是您的朋友。它会转义特殊字符。
if (preg_match("/\b" . preg_quote($productcolor, "/") . "\b/i", $searchProductName)) {
//do something
}
答案 1 :(得分:-1)
按照其他人的建议,我更改了定界符
更改了此
if (preg_match("/\b$productcolor\b/i", "$searchProductName")) {
//do something
}
对此
if(preg_match("[$productcolor]", "$searchProductName")){
//do something
}
为我工作。